我正在尝试在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根目录中。
答案 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)
您需要在清单文件中添加类路径