我知道已经有很多关于这个主题的问题,但我找不到一个来解决我的问题。
我只是创建了一个 JAVA applet,它从 xml 文件中读取数据,然后执行与它相关的操作。当我在 Eclipse 中进行测试时,它可以正常使用以下代码(第 1 周是一个按钮!):
week1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
parseXMLFile("../../week1.xml", teams);
updateTable(teams);
}
});
由于 .java 文件位于 src 文件夹中,而 xml 位于根目录中,因此“../../week1.xml”可以解决问题。但是当我将 applet 导出为 JAR 并将其插入 HTML 页面时,页面会加载 applet 但是当我单击 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?
非常感谢
最佳答案
how can I do this as the code inside the JAR needs to read the xml that's outside?
- 将 XML 放在服务器上的一个路径中,您可以在该路径中使用浏览器访问它(通过尝试通过服务器/本地主机在浏览器中显示它来检查)。
- 通过 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 来解决。
关于java - Applet 需要读取位于 JAR 外部的 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9946579/