在Java/JNLP中加载资源的可靠方法

在Java/JNLP中加载资源的可靠方法,java,resources,jar,packaging,jnlp,Java,Resources,Jar,Packaging,Jnlp,我正在编写一个Java应用程序,它需要访问运行在JNLP上的.jar文件中的多个资源 虽然应用程序在my development environment(Eclipse)中运行良好,但当通过JNLP执行时,它不工作,显然是因为它在jar中找不到资源文件。我已经检查了资源文件,资源肯定在那里 我目前使用的代码如下: someclass.getResourceAsStream("/resources/somefile.png"); 使用JNLP访问.jar中资源文件的正确方法是什么?使用:thi

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

虽然应用程序在my development environment(Eclipse)中运行良好,但当通过JNLP执行时,它不工作,显然是因为它在jar中找不到资源文件。我已经检查了资源文件,资源肯定在那里

我目前使用的代码如下:

 someclass.getResourceAsStream("/resources/somefile.png");
使用JNLP访问.jar中资源文件的正确方法是什么?

使用:this.getClass().getClassLoader().getResourceAsStream(名称)
示例:myClass.getClass().getClassLoader().getResourceAsStream(“resources/somefile.png”)

两个提示:
1-使用jar文件中自己的类。如果使用另一个类(例如对象),则会失败

2-名称,即资源必须不带“/”

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


通过类获取资源时,除非以“/”开头,否则路径将相对于该类进行解析。当您通过类加载器获取它时,它总是作为绝对路径解析,并且不能以“/”开头

在我的例子中,对于位于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);

p、 它还可以作为从命令行运行的可执行jar。。。。因此,使用上下文类加载器确实似乎是一个JNLP特定的问题:
Thread.currentThread().getContextClassLoader().getResourceAsStream(“/resources/somefile.png”)
。看起来很有希望(尽管出于某种原因,我不得不删除路径中的前导“/”。现在正在测试…当您通过类获取资源时,路径将相对于该类进行解析,除非以“/”开头。当您通过类加载器获得它时,它总是作为绝对路径解析,并且不能以“/”开头。谢谢Romain!这似乎是可行的,我认为问题在于使用了jar文件中没有的Java类