我正在编写一个Java应用程序,需要访问通过JNLP运行的.jar文件中的多个资源。
虽然应用程序在我的开发环境(Eclipse)中运行良好,但它在通过JNLP执行时不起作用,显然是因为它无法在jar中找到资源文件。我已经检查了资源文件,资源肯定在那里。
我目前正在使用以下代码:
someclass.getResourceAsStream("/resources/somefile.png");
访问.jar中可与JNLP一起使用的资源文件的正确方法是什么?
答案 0 :(得分:2)
使用:this.getClass()。getClassLoader()。getResourceAsStream(name)
示例:myClass.getClass()。getClassLoader()。getResourceAsStream(“resources / somefile.png”)
两个提示:
1 - 使用jar文件中自己的类。如果使用另一个类 - 例如对象 - 失败
2 - 名称,即资源必须没有前导'/'
答案 1 :(得分:1)
我在一个类似的问题上被困了一段时间,@ Devon_C_Miller的评论救了我(一旦我看到它,过了一段时间!),所以我想我会在这里复述它:
当您通过Class获取资源时,路径将相对于类解析,除非您使用'/'启动它。当你通过ClassLoader得到它时,它总是被解析为绝对路径,并且不能以'/'开头。
就我而言,我使用以下语法,对于位于JAR中的文件:/properties/config.properties
:
//NO LEADING `/` EVEN IF IT IS AN ABSOLUTE PATH
private final static String CONFIG_FILE = "properties/config.properties";
InputStream resource = Configuration.class.getClassLoader().getResourceAsStream(CONFIG_FILE);