2

我正在编写一个 Java 应用程序,它需要访问通过 JNLP 运行的 .jar 文件中的多个资源。

虽然该应用程序在我的开发环境(Eclipse)中运行良好,但在通过 JNLP 执行时它不起作用,显然是因为它在 jar 中找不到资源文件。我检查了资源文件,资源肯定在那里。

我目前正在使用如下代码:

 someclass.getResourceAsStream("/resources/somefile.png");

访问可与 JNLP 一起使用的 .jar 中的资源文件的正确方法是什么?

4

2 回答 2

2

使用:this.getClass().getClassLoader().getResourceAsStream(name)
示例:myClass.getClass().getClassLoader().getResourceAsStream("resources/somefile.png")

两个提示:
1 - 使用您自己的 jar 文件中的类。如果使用另一个类 - 例如 Object - 失败
2 - 名称即资源必须没有前导“/”

于 2010-07-20T21:12:57.413 回答
1

我在类似的问题上卡了一段时间,@Devon_C_Miller 的评论救了我(一旦我看到它,过了一段时间!),所以我想我会在这里重新复制它:

当您通过类获取资源时,路径是相对于类解析的,除非您以“/”开头。当您通过 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);
于 2012-04-02T13:10:44.247 回答