小编典典

在Java Webstart应用程序中从Jar获取资源

java

我正在尝试在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为true,但InputStream为false。

关于我可能做错了什么的任何想法?是否有更好的方式来装载资源以供Java Webstart应用程序使用?

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


阅读 229

收藏
2020-11-26

共1个答案

小编典典

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

尽管在大多数环境中(例如在IDE中)都可以通过这种方式访问​​资源,但是从Java Webstart运行时则是不可能的。

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

…并遵循了这种方法来创建资源目录,然后我可以进行迭代以获取相关资源。

2020-11-26