Applet需要读取位于JAR外部的XML

时间:2012-03-30 16:05:58

标签: java jar applet

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

我只是创建一个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?

非常感谢

2 个答案:

答案 0 :(得分:2)

  

我怎么能这样做,因为JAR中的代码需要读取外面的xml?

  1. 将XML放在服务器上的路径中,您可以使用浏览器访问它(通过尝试在浏览器中显示,通过.server / localhost进行检查)。
  2. 按网址访问资源。要形成该网址,请使用相对于小程序的document basecode base的路径。
  3. E.G。

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

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

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

答案 1 :(得分:1)

你的问题对我来说很困惑 据我了解,XML文件属于您自己,并且预计始终位于同一位置(例如,最终用户不应提供不同的XML。) 那么为什么不在jar中提供文件,以便你可以使用相对路径?你为什么要从罐子外面读它?