当前位置: 首页 > 知识库问答 >
问题:

将Eclipse项目导出到可运行的Jar

柴耀
2023-03-14

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

我可以很好地提取它们,但当我尝试运行它时,它什么也不做。

当我在命令提示符下用

java -jar ModdingForScrubs.jar

它所指向的特定行是:

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

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

当我将它导出到一个jar时,它得到一个NPE,我相信这是由于它找不到文件造成的。

以下是我的项目工作区:

http://imgur.com/034pbw8

如有任何帮助,我们将不胜感激。

共有1个答案

彭鸿文
2023-03-14

要考虑的事情。

>

  • 使用file时,不应使用硬编码值。一旦应用程序出现“jarred”,文件系统位置将不再与从IDE运行时相同。

    如果您想读取一个jar资源,您应该通过URL读取一个资源,使用getClass().getResource(“...”)或其变体之一。

    而且看起来(对于使用“resources/background”的路径),“resource”与src处于同一级别,而不是包含在JAR构建路径中的事件。如果你把罐子取出来,我很肯定文件就不在那里了。

    您应该将“resources”放入“src”中,这样它就会自动放入构建路径中。您可以将其保留在原地,并配置构建以添加它,但这将需要更长的解释。所以把它放在“SRC”里就行了。因此您将有一个文件结构,如

    ProjectRoot
            src
               resources
                      beackground
    

    问题仍然是试图读取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创建文件

    • 请参阅API以获取更多资源获取方法和一些说明。

  •  类似资料:
    • 我确实检查了已经回答过的问题,这些问题的主题几乎与这个问题相同,但没有一个回答过的问题能够解决我的问题。 我已经在线搜索了大约4个小时,尝试了很多不同的方法来解决我的问题。。 我想在Java做一个乒乓游戏,现在我想导出我的项目,这样我就可以把它发给一些朋友,这样他就可以试试了。 我在这个项目中使用LWJGL,所以我确实在参考库和LWJGL中添加了一些JAR。jar添加了windows本机,它包含在

    • 我正在尝试将gradle eclipse项目导出到一个可运行的jar,但是它的依赖项并没有绑定到可运行的jar中。 I file->export->runnable jar->将所需库提取到生成的jar中。 如果我从configure build path选项手动执行“add external jar”,它们就会正确导出,但是我想通过gradle执行此操作,如果没有手动添加,它们就不会正确导出。

    • 有没有什么我应该提前补充的谢谢:)

    • 我已经找了差不多一个星期的答案了,但我似乎找不到正确的答案。因此,我在Eclipse上构建了一个GUI java应用程序。我有Java JDK版本1.8.0-45,我的应用程序引用了大约4个库。我希望能够创建可以在任何其他计算机上运行的。jar文件或。exe文件。 所以我有几个解决方案。我试过JSmooth,Advanced Installed 12.2,Launch4J,每个应用程序都能正常工作

    • 我在尝试导出独立应用程序时遇到问题。 当我使用eclise执行它时,它运行正常,但当我试图导出到可运行的jar时,它会给我一些错误。 我的坚持。xml看起来像 它位于src/META-INF/persistence。xml 从终端运行时得到的堆栈跟踪是: 在爪哇。朗,反思一下。方法在组织中调用(未知源)。日食jdt。内部的jarinjarloader。罐式装载机。main(jarsrcloader

    • 我知道这个问题已经问过很多次了,但这样的回答没有帮助 有人能告诉我在eclipse导出过程中应该使用什么设置吗?