从java webstart应用程序中的jar获取资源

时间:2011-09-05 10:49:04

标签: java resources jar jnlp java-web-start

我正在尝试在Java webstart应用程序中加载大量资源。

我原本试图使用以下方法加载这些:

ClassLoader loader = MyClass.class.getClassLoader();
URL url = loader.getResource("resourceName");
File file = new File(url.toURI());

但这不起作用 - 它抛出了IllegalArgumentException。进一步的研究表明,这种方法不适用于从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中,我得到了真实的&是的(正如我所料)。 从jnlp运行,我得到的是URL,但是对于InputStream是假的。

关于我可能做错的任何想法? 有没有更好的方法来加载资源以便在java webstart应用程序中使用?

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

3 个答案:

答案 0 :(得分:2)

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);
}

答案 1 :(得分:1)

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

虽然在大多数环境中(例如在IDE中)可以以这种方式访问​​资源,但从Java webstart运行时却无法实现。

我发现此页面特别有用: http://lopica.sourceforge.net/faq.html#listresources

...并且已经按照这种方法制作资源目录,然后我可以迭代以获取相关资源。

答案 2 :(得分:0)

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