将Eclipse项目导出到Runnable Jar

时间:2014-09-21 06:19:18

标签: java eclipse executable-jar

所以,我已经在互联网上阅读了如何将我的项目提取到Runnable Jar文件。

我能够很好地提取它们,但是当我尝试运行它时,它什么也没做。

当我使用

在命令提示符下运行它时
java -jar ModdingForScrubs.jar

,我得到以下输出:

http://imgur.com/FOJKPma

它指向的特定行是:

int numOfBackgrounds = new File("resources/background").listFiles().length;

它产生一个空指针异常。当我在eclipse中运行我的项目时,它很好。

当我将它导出到jar时,会得到一个NPE,我认为这是因为它无法找到该文件。

这是我的项目工作区:

http://imgur.com/034pBW8

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

要考虑的事情。

  1. 使用File时,应使用硬编码值。一旦应用程序“震撼”,文件系统位置将不再与从IDE运行时相同。

  2. 如果您想阅读jar资源,您应该通过URL使用getClass().getResource("...")或其中一个变体来读取资源。

  3. 它看起来(使用“资源/背景”的路径),“资源”与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文件一起导出。