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

标签 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 中,我得到 true & true (正如我所期望的)。 从 jnlp 运行,我得到的 URL 为 true,但输入流为 false。

关于我可能做错了什么有什么想法吗? 是否有更好的方法来加载资源以在 java webstart 应用程序中使用?

编辑:仅供引用,我的资源位于 MyProject/src/main/resources 中,生成 jar 时,资源位于 jar 根目录中。

最佳答案

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

关于java - 从 java webstart 应用程序中的 jar 获取资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7306965/

相关文章:

android - Android 上从右到左语言的状态如何?

Java - Jar 文件可执行文件中的参数

java - 模块和 JAR 文件有什么区别?

java - org.eclipse.OSGI jar 中似乎缺少类?

带有抽象参数的Java泛型接口(interface)调用

java - GWT 中的 UIBinder 和 MVP

java - Spring 5 - 如何提供静态资源

wpf - 如何在 WPF Window.Resources 中设置样式。

java - 编码时单组元素的 JAXB 元素包装器

java - 如何将 Deeplearning4j 的 UIServer 端口从 9000 更改为其他端口?