【问题标题】:Applet needs to read an XML located outside the JARApplet 需要读取位于 JAR 之外的 XML
【发布时间】:2012-04-14 08:26:01
【问题描述】:

我知道已经有很多关于这个主题的问题,但我找不到适合我的问题的问题。

我只是创建了一个 JAVA 小程序,它从 xml 文件中读取数据,然后执行与它相关的操作。当我在 Eclipse 中进行测试时,它适用于以下代码(week1 是一个按钮!):

week1.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent evt) {
                parseXMLFile("../../week1.xml", teams);
                updateTable(teams);
          }
        });

由于 .java 文件位于 src 文件夹中,而 xml 位于根目录中,因此“../../week1.xml”可以解决问题。但是当我将小程序导出为 JAR 并将其插入 HTML 页面时,该页面会随小程序一起加载,但是当我单击 week1 按钮时,什么也没有发生(我几乎可以肯定这是因为它没有找到 xml 文件作为它在 JAR 档案之外)。 我在 Java 控制台中收到此错误:

java.security.AccessControlException: access denied ("java.util.PropertyPermission" "user.dir" "read")
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPropertyAccess(Unknown Source)
at java.lang.System.getProperty(Unknown Source)
at java.io.Win32FileSystem.getUserPath(Unknown Source)
at java.io.Win32FileSystem.resolve(Unknown Source)
at java.io.File.getAbsolutePath(Unknown Source)
at java.io.File.getAbsoluteFile(Unknown Source)
at java.io.File.toURI(Unknown Source)
at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
at skullBall.parseXMLFile(skullBall.java:77)
at skullBall.access$0(skullBall.java:70)
at skullBall$1.actionPerformed(skullBall.java:52)

我想将 .jar 存档和 xml 文件放在同一个位置,我该怎么做,因为 JAR 内的代码需要读取外部的 xml?

非常感谢

【问题讨论】:

  • “当我点击 week1 按钮时,没有任何反应” 几乎可以肯定。检查 Java 控制台的输出。在没有打开控制台的情况下调试小程序就像试图用一只手臂绑在背后战斗。

标签: java jar applet


【解决方案1】:

由于 JAR 中的代码需要读取外部的 xml,我该怎么做?

  1. 将 XML 放在服务器上的路径中,您可以使用浏览器访问它(通过服务器/本地主机尝试在浏览器中显示它来检查)。
  2. 通过 URL 访问资源。要形成该 URL,请使用相对于小程序的 document base 或 code base 的路径。

例如

URL urlToXml = new URL(getDocumentBase(), "the.xml");

java.security.AccessControlException: access denied (
    "java.util.PropertyPermission" "user.dir" "read")

这应该通过相对于文档(或代码)库的 URL 访问 XML 来解决。

【讨论】:

  • 听起来不错...我会尝试用它做点什么,我会回复你的!我确实查看了控制台,错误出现在调用 parseXMLFile() 函数的那一行!谢谢
【解决方案2】:

你的问题让我很困惑。
据我了解,XML 文件是您的,并且它应该总是在同一个位置(例如,最终用户不应该提供不同的XML)。
那么,为什么不将文件放在 jar 中,以便使用相对路径呢?你为什么要从罐子外面读取它?

【讨论】:

  • XML 文件将改变。最终用户(我)会将旧的 xml 文件替换为另一个内容不同但名称相同的文件。我只是不想每次需要更改 XML 的内容时都重新打包 jar 文件
猜你喜欢
  • 2012-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-09
  • 2013-10-07
  • 2020-12-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多