【问题标题】:Getting resources from jar in a java webstart application从 java webstart 应用程序中的 jar 获取资源
【发布时间】:2015-01-19 15:50:17
【问题描述】:

我正在尝试在 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 根目录中。

【问题讨论】:

  • jar 文件的根目录下是否有“resourceName”文件?
  • @JB Nizet - 是的(需要为 (loader.getResource(r)!=null) 实现)。编辑问题以澄清。

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


【解决方案1】:
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);
}

【讨论】:

  • 谢谢。刚试过这个 - 当我从 jnlp 运行时, url.openStream() 也返回 null
  • 如果URL 不是null,我很难相信InputStream 会是null。您确定代码正在正确更新吗?始终卸载应用程序。运行之间。为每个测试添加一个带有数字的System.out.println(),以确保您看到的是当前代码。
  • 我已经完成了卸载。我已经添加了您的建议和第三个 println,所以我非常有信心看到正确的代码。
  • URL 的 println 返回 jar:file:/C:/path/to/lib/myProject.jar!/resourceName
【解决方案2】:

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

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

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

...并按照该方法制作资源目录,然后我可以遍历该目录以获取相关资源。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-19
      • 2011-01-15
      • 2012-04-11
      • 1970-01-01
      • 2019-11-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多