Java - Netbeans 的 .jar 意外问题

标签 java netbeans jar

首先,我知道 Stack Overflow(以及任何有能力的类似论坛网站)的“先搜索,最后询问”的政策,并且在做作业时,我搜索了各种来源以找到问题的解决方案。话虽如此,我找不到合适的答案,只好亲自问这个问题。

我的编程技能有些中等,尤其是 Java 语言方面。我正在使用默认的 Java SE JDK 开发这个 2D 游戏。更具体地说是 JDK 7u4。在这个项目中,我们有一个类来管理大多数 I/O 操作。它的方法之一返回文件的路径:

public static URL load(String resource) {
    return ZM.class.getResource(resource);
}

现在,在 Netbeans(版本 7.1)上运行项目时,此方法可以正常工作。然而,在构建和清理项目时,生成的 .jar 文件似乎与其创建者不一致。在命令行上运行 .jar 时,JVM 捕获了 NullPointerException。似乎无法在 .jar 内读取该文件。遵循程序员的直觉,我开始调试该项目。我的第一次尝试是检查 load 方法是否是错误的成员。我进行了一些测试并获得了一些有趣的结果:

当在 Netbeans 上运行应用程序并使用“ZM.class”作为方法参数时,它返回:

/D:/Projects/GeometryZombiesMayhem/build/classes/geometryzombiesmayhem/ZM.class

但是当从 .jar 文件运行它时,它返回:

file:/D:/Projects/GeometryZombiesMayhem/dist/GeometryZombiesMayhem.jar!/geometryzombiesmayhem/ZM.class

当然,我尝试从中删除初始的 file: 字符串。没有效果。然后我尝试从 [...].jar![...] 中取出感叹号。再说一次,什么也没有。我尝试从路径中删除所有可能的排列。运气不好。

针对自己的 .jar 文件测试该方法效果良好。现在,当我尝试访问文件内部时,它不允许我。在这个项目的早期版本中,它运行得很好。我不太确定发生了什么事。欢迎任何帮助。

预先感谢您, 雷纳托

最佳答案

当从 jar 文件加载资源时,我总是使用类加载器。无论您是从 IDE 中运行、启动可执行 jar 文件还是使用 JNLP 从网站运行程序,一切似乎都一样。

尝试以这种方式加载资源:

 try {
      ClassLoader cl = ZM.getClass().getClassLoader();     
      ImageIcon img  = new ImageIcon(cl.getResource("images/programIcon.jpg"));
      // do stuff with img.
 }
 catch(Exception failed) {
     System.out.println(failed);
 }

还有一个建议 - 您应该为资源创建一个单独的文件夹。在上面的示例中,images 是 src 文件夹内的一个文件夹。这样,当我构建它时,它会自动成为 jar 的一部分,但我将资源与源代码分开。

关于Java - Netbeans 的 .jar 意外问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10670282/

相关文章:

java - Maven 原型(prototype)中的公爵年龄在哪里?每第一杯 JEE7

java - ImageJ 创建一个 .jar 来运行一组宏

java - 允许 java 程序自动更新的小类

JAVAFX媒体: Serious optimization problem

java - 两个具有不同参数的同名函数,一个没有作用域解析运算符,另一个有

java - 将字符串从 jsp 传递到 servlet 时获取 null

java - 执行jar文件时出错

java - 如何使 JList 在 netbeans Swing 应用程序中随窗口自动拉伸(stretch)?

jakarta-ee - Maven在pom中下载未指定的jar文件

java - 如何在 JPA 2.1 中映射来自 NameStoredProcedure 的非实体结果集?