在JavaWebStart应用程序中从jar获取资源

在JavaWebStart应用程序中从jar获取资源,java,resources,jar,jnlp,java-web-start,Java,Resources,Jar,Jnlp,Java Web Start,我试图在JavaWebStart应用程序中加载大量资源 我最初尝试使用以下方式加载这些文件: ClassLoader loader = MyClass.class.getClassLoader(); URL url = loader.getResource("resourceName"); File file = new File(url.toURI()); 但这并没有起作用——它引发了一个非法的争论。进一步的研究表明,这种方法不适用于从jar文件访问资源,我需要使用以下方法: ClassLo

我试图在JavaWebStart应用程序中加载大量资源

我最初尝试使用以下方式加载这些文件:

ClassLoader loader = MyClass.class.getClassLoader();
URL url = loader.getResource("resourceName");
File file = new File(url.toURI());
但这并没有起作用——它引发了一个非法的争论。进一步的研究表明,这种方法不适用于从jar文件访问资源,我需要使用以下方法:

ClassLoader loader = MyClass.class.getClassLoader();
InputStream in = loader.getResourceAsStream("resourceName");
然而,当我从Jnlp运行这个时,我得到了奇怪的结果。如果我运行以下命令:

public static void main(String[] args) throws IOException, URISyntaxException {
  ClassLoader loader = MyClass.class.getClassLoader();
  String r = "resourceName";
  URL url = loader.getResource(r);
  System.out.println(url!=null);
  InputStream in = loader.getResourceAsStream(r);
  System.out.println(in!=null);
}
在我的IDE中,我得到了true&true(正如我所期望的)。 从jnlp运行时,URL为true,而InputStream为false

你知道我可能做错了什么吗? 是否有更好的方法加载资源以在JavaWebStart应用程序中使用


编辑:对于信息,我的资源在MyProject/src/main/resources中,当jar生成时,资源在jar根目录中。

好-所以问题是我试图访问资源目录(即,从我问题中的示例来看,resourceName是资源文件的目录)

public static void main(String[] args) throws IOException, URISyntaxException {
  ClassLoader loader = MyClass.class.getClassLoader();
  String r = "resourceName";
  URL url = loader.getResource(r);
  System.out.println(url!=null);
  InputStream in = url.openStream();
  System.out.println(in!=null);
}
虽然在大多数环境中(例如在IDE中)可以通过这种方式访问资源,但在从Java webstart运行时是不可能的

我发现这一页特别有用:


…并按照这种方法制作了一个资源目录,然后我可以遍历它以获得相关的资源。

您需要在清单文件中添加类路径。

您是否在jar文件的根目录下有一个“resourceName”文件?@JB niset-yes(需要为(loader.getResource(r)!=null)获得true)。编辑问题以澄清。谢谢。刚刚尝试过这个-当我从jnlp运行时,url.openStream()也返回null如果
url
不是
null
,我发现很难相信
InputStream
会是
null
。您确定代码正在正确更新吗?始终卸载应用程序。中途休息。添加一个
System.out.println()
,每个测试都有一个数字,以确保您看到的是当前代码。我已经完成了卸载。我已经添加了您的建议和第三个println,所以我很有信心看到了正确的代码。URL的println返回jar:file:/C:/path/to/lib/myProject.jar/资源名