2012-04-14 129 views
0

我试图访问我已经嵌入到JAR文件中的资源。需要访问一个文件中的类是:在JAR文件中访问资源

/worldEntities/factories/RoomFactory.class 

,并尝试访问:

/map-data/roomDescriptions.xml 

要做到这一点,我已经添加以下代码RoomFactory.class:

Document doc = docBuilder.parse(this.getClass().getResourceAsStream("/map-data" + File.separator + "roomDescriptions.xml")); 

当我在NetBeans中执行项目时,它工作正常,没有错误。然而,当我试图通过进入

java -jar Program.jar 

运行命令行的代码,我得到了java.lang.IllegalArgumentException:InputStream中不能为空,并且它指向我上面描述的代码。

在此先感谢您的帮助,

托马斯

+2

如果使用File.separator,则应该一致地使用它,包括前导斜杠。另一方面,在getResourceAsStream调用中使用它是错误的,因为这不代表本地文件系统路径。只需使用斜线,就可以保证跨平台。 – 2012-04-14 13:21:07

回答

0
  1. 名称与"-" char无效Java包名称。所以"map-data"不是有效的软件包名称。

  2. 然后File.separator在不同的平台上可能会有所不同。在代码中使用"/"以确保使用有效的包分隔符。

+0

谢谢,这完全正确! – 2012-04-15 11:34:14

0

你需要确保你捆绑用的.jar资源,否则它不会被发现

This post应该帮助如何从NetBeans中执行它