在 Java/JNLP 中加载资源的可靠方法

发布于 2024-09-10 12:02:51 字数 354 浏览 10 评论 0原文

我正在编写一个 Java 应用程序,该应用程序需要访问通过 JNLP 运行的 .jar 文件中的多个资源。

虽然该应用程序在我的开发环境(Eclipse)中工作正常,但在通过 JNLP 执行时却无法工作,显然是因为它在 jar 中找不到资源文件。我检查了资源文件,资源肯定在那里。

我当前使用的代码如下:

 someclass.getResourceAsStream("/resources/somefile.png");

What is the right way to access a resources file in a .jar that will work with JNLP?

I'm writing a Java application that needs to access several resources in a .jar file that is run over JNLP.

While the application works fine in my development environment (Eclipse) it doesn't work when executed through JNLP, apparently because it can't find the resource file in the jar. I've checked the resource file and the resources are most definitely there.

I'm currently using code like:

 someclass.getResourceAsStream("/resources/somefile.png");

What is the correct way to access a resource file in a .jar that will work with JNLP?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

无力看清 2024-09-17 12:02:51

使用: this.getClass().getClassLoader().getResourceAsStream(name)
示例: myClass.getClass().getClassLoader().getResourceAsStream("resources/somefile.png")

两个提示:
1 - 使用 jar 文件中您自己的类。如果使用另一个类 - 例如对象 - 失败
2 - 名称即资源必须不带前导“/”

use : this.getClass().getClassLoader().getResourceAsStream(name)
example: myClass.getClass().getClassLoader().getResourceAsStream("resources/somefile.png")

two tips:
1 - use your own class that is in jar file. if used another class - for example Object - fails
2 - name i.e. resource must be without leading '/'

旧时浪漫 2024-09-17 12:02:51

我在类似的问题上陷入了一段时间,@Devon_C_Miller 的评论救了我(一段时间后我看到了它!),所以我想我应该在这里重新复制它:

当您通过类获取资源时,路径将相对于类进行解析,除非您以“/”开头。当您通过类加载器获取它时,它始终被解析为绝对路径,并且不能以“/”开头。

就我而言,我对 JAR 中的文件使用以下语法:/properties/config.properties

//NO LEADING `/` EVEN IF IT IS AN ABSOLUTE PATH
private final static String CONFIG_FILE = "properties/config.properties";
InputStream resource = Configuration.class.getClassLoader().getResourceAsStream(CONFIG_FILE);

I got stuck for a while on a similar issue and the comment from @Devon_C_Miller saved me (once I saw it, after some time!), so I thought I'd recopy it here:

When you get a resource via a Class, the path is resolved relative to the class, unless you start it with a '/'. When you get it via a ClassLoader, it is always resolved as an absolute path and must not begin with a '/'.

In my case, I use the following syntax, for a file located in the JAR: /properties/config.properties:

//NO LEADING `/` EVEN IF IT IS AN ABSOLUTE PATH
private final static String CONFIG_FILE = "properties/config.properties";
InputStream resource = Configuration.class.getClassLoader().getResourceAsStream(CONFIG_FILE);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文