我正在尝试使用 intelij Idea 工件将我的应用程序导出到 jar 中。我导出除资源之外的所有内容(我认为 14,5GB 对于 .jar 文件来说太多了),因此我将 /res
文件夹放在与 jar 相同的文件夹中。
现在我的结构如下所示:
/SAR.jar
/res/colors/
/res/icons/
/res/map/
但是我无法访问此资源。我使用以下代码来获取路径:
dir = new File(getClass().getProtectionDomain().getCodeSource().getLocation().toURI().getPath() + "/res/icons/");
从 IDE 运行时它可以工作并打印正确的位置。但是,当我构建一个工件并通过 cmd 运行它时,我得到空指针并打印此路径:D:/JavaProject/SAR/out/artifacts/SAR_jar/SAR.jar/res/icons
。但我的资源不在 jar 文件内,它们仅位于同一目录中。
有什么想法吗?我只在路径中完成了 android 项目,我根本无法让这个资源系统与 jar 一起工作。
感谢转发
最佳答案
您正在尝试使用依赖于源代码位置的路径来访问资源,但显然情况并非如此,因为您将代码(或 jar 中的字节码)和资源分开了。您必须使用相对于 jar 的路径或绝对路径来访问它们。
我认为您只需要以下路径(如果 jar 是从包含 jar 的目录运行的):
new File("res/icons/icon.png")
关于Java获取没有.jar文件的执行jar的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30276160/