我知道关于这个话题已经有很多问题,但是找不到我的问题。
我只是创建一个JAVA applet,它从xml文件中读取,然后执行与它有关的操作。当我在Eclipse中测试时,它可以正常使用以下代码(week1是一个按钮!):
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?
非常感谢
答案 0 :(得分:2)
我怎么能这样做,因为JAR中的代码需要读取外面的xml?
URL urlToXml = new URL(getDocumentBase(), "the.xml");
java.security.AccessControlException: access denied (
"java.util.PropertyPermission" "user.dir" "read")
这应该通过相对于文档(或代码)库访问XML来解决。
答案 1 :(得分:1)
你的问题对我来说很困惑
据我了解,XML
文件属于您自己,并且预计始终位于同一位置(例如,最终用户不应提供不同的XML
。)
那么为什么不在jar中提供文件,以便你可以使用相对路径?你为什么要从罐子外面读它?