gpt4 book ai didi

java - 当 jar 位于 protected Windows 目录中时无法获取 jar 资源

转载 作者:行者123 更新时间:2023-12-01 13:12:36 25 4
gpt4 key购买 nike

我在自动执行的 .jar 中有一个属性文件。实际上属性文件是在一个jar里面的jar(用one-jar打包的)。如果我从桌面运行我的 jar,它可以正常工作,但是当我将它放入 Program Files 目录中时,它会失败。

这是我用来加载属性文件的代码:

public static void initialize(String language, String region) throws IOException {
try {
Locale locale = new Locale(language, region);
bundle = ResourceBundle.getBundle("resources.MessagesBundle", locale);
} catch (Exception e) {
InputStream is = Localization.class.getClassLoader()
.getResourceAsStream("resources/MessagesBundle_en_US.properties");
bundle = new PropertyResourceBundle(is);
}
}

我做了一些实验,试图获得比“MissingResource”更好的错误消息,但到目前为止,它要么有效,要么无效。下面还有一些代码,除非位于 Program Files 目录中,否则都可以正常工作:

ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
InputStream is = contextClassLoader.getResourceAsStream(fileName);
if (is != null) {
int avail = is.available();
System.out.println("Available: " + avail);
} else {
System.out.println("Can't open!!!!!");
}

这是 ResourceBundle.getBundle 的完整异常,其他函数在无法加载文件时仅返回 null:

Caused by: java.util.MissingResourceException: Can't find bundle for base name com.willwinder.universalgcodesender.i18n.MessagesBundle, locale en_US
at java.util.ResourceBundle.throwMissingResourceException(Unknown Source)
at java.util.ResourceBundle.getBundleImpl(Unknown Source)
at java.util.ResourceBundle.getBundle(Unknown Source)
at com.willwinder.universalgcodesender.i18n.Localization.initialize(Localization.java:39)
at com.willwinder.universalgcodesender.i18n.Localization.getString(Localization.java:44)
at com.willwinder.universalgcodesender.SettingsFactory.(Settings
Factory.java:65)
... 7 more

所以问题是:当在 Program Files 目录中执行 jar 时,如何从 jar 加载资源包?

这是一个开源项目,完整的源代码可以在这里找到:https://github.com/winder/Universal-G-Code-Sender

有问题的 jar 在这里:https://github.com/winder/builds/blob/master/UniversalGCodeSender/UniversalGcodeSender-v1.0.7.zip?raw=true

最佳答案

这在某种程度上与 one-jar 有关,它用于将 native 文件与 jar 文件一起打包到可自执行的 jar 中。这些资源文件最初看起来像这样:

basejar.jar
\- lib\ (jar dependencies)
|- binlib\ (native dependencies, serial lib, opengl, etc)
|- main\
\- main.jar (my code)
\- resources\
\- MessagesBundle_en_US.properties

重新组织 jar 以使资源目录位于容器 jar 的顶层后,我现在可以从 protected 目录执行 jar:

basejar.jar
\- lib\ (jar dependencies)
|- binlib\ (native dependencies, serial lib, opengl, etc)
|- main\
| \- main.jar (my code)
|- resources\
\- MessagesBundle_en_US.properties

我仍然不确定根本原因是什么,但这似乎是 one-jar 中的一个错误。

关于java - 当 jar 位于 protected Windows 目录中时无法获取 jar 资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22738778/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com