所以,我已经在互联网上阅读了如何将我的项目提取到Runnable Jar文件。
我能够很好地提取它们,但是当我尝试运行它时,它什么也没做。
当我使用
在命令提示符下运行它时java -jar ModdingForScrubs.jar
,我得到以下输出:
它指向的特定行是:
int numOfBackgrounds = new File("resources/background").listFiles().length;
它产生一个空指针异常。当我在eclipse中运行我的项目时,它很好。
当我将它导出到jar时,会得到一个NPE,我认为这是因为它无法找到该文件。
这是我的项目工作区:
任何帮助都将不胜感激。
答案 0 :(得分:1)
要考虑的事情。
使用File
时,不应使用硬编码值。一旦应用程序“震撼”,文件系统位置将不再与从IDE运行时相同。
如果您想阅读jar资源,您应该通过URL使用getClass().getResource("...")
或其中一个变体来读取资源。
它看起来(使用“资源/背景”的路径),“资源”与src
处于同一级别,并且不是事件被包含在jar的构建路径中。如果你提取jar,我很确定文件不会存在。
您应该将“resources”放在“src”中,因此它会自动放入构建路径中。您可以将其保留在原位,并配置构建以添加它,但这需要更长的解释。所以就把它放在“src”中。所以你将拥有像
这样的文件结构ProjectRoot
src
resources
beackground
问题仍然是尝试读取路径a File
,它将使用硬编码相对路径在文件系统上搜索文件。那不行。正如我所说,它应该从URL中读取。所以你可以这样做:
URL url = TestFiles.class.getResource("/resources/background");
URI uri = url.toURI();
File file = new File(uri);
File[] files = file.listFiles();
for (File f : files) {
System.out.println(f.getAbsolutePath());
}
这应该有效。所以只需确保在构建之后,文件实际存在于jar中,然后获取所需目录的url,然后就可以从URI创建File
Class
API。答案 1 :(得分:0)
找不到资源/后台文件夹。 那是因为资源文件夹不在你的src文件夹中,所以在打包Jar文件时,资源文件夹不在其中 - 你可以打开Jar文件看看。
所以我认为您应该将resources文件夹移动到您的src文件夹中,然后访问它 - 现在它应该与您的Jar文件一起导出。