Java 简单项目处理资源

标签 java jar noclassdeffounderror

我有一个简单的 java 项目,并且有一个名为 Constants 的类 我将所有需要的路径存储在静态变量中,如下所示 例如:

public static final String PLAYFIELD_SMALL_IMAGE_PATH =  Constants.class.getClassLoader().getResource("Player_Small.png").getPath();

只要我留在 Eclipse 中就可以正常工作;)

但是当我将程序导出到 JAR 文件并启动它时,出现异常:

java.lang.ExceptionInInitializerError

当我第一次调用以下命令时会出现:

Constants.PLAYFIELD_SMALL_IMAGE_PATH

如果我第二次启动,我会收到此错误:

java.lang.NoClassDefFound: Could not initalize class Constants

我到底做错了什么?

编辑1:

我在这里找到了这个:"NoClassDefFoundError: Could not initialize class" error

似乎是完全相同的问题。那么我不应该使用静态变量吗?

编辑2:

如果我使用静态初始化程序 block ,则会出现 ExceptionInInitializerError 立即被抛出。没有静态初始化 block 我能够 进入我的程序的第一个菜单。

编辑3:

也许还有另一个提示!当我提取 jar 时,所有图形都直接位于根文件夹中,因此 我尝试使用这样的相对路径:

public static final String PLAYFIELD_SMALL_IMAGE_PATH = "Player_Small.png";

但是如果我这样做,我的图形就不会加载。

最佳答案

首先打开你的 jar 包并检查是否所有的类都在那里。

你可以做很多事情来解决这个问题,首先我建议使用 Maven 并了解它(对于初学者来说,请查看 Maven in 5 minutes ),但是如果你想保留最小的 java 项目,那么你可以尝试以下操作:

Thread.currentThread().getContextClassLoader().getResourceAsStream("File1.jpg");

这应该有帮助

关于Java 简单项目处理资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18227458/

相关文章:

java - LIBGDX RayCast : how do i stop the ray?(如何返回世界上想要的灯具)

java - 使用 java 从 JSON 读取数组名称本身(而不是其内容)

运行 jar 时出现 java.util.MissingResourceException

java - 使用 netbeans 创建 maven 项目的 jar 文件

java - OpenSAML 仅在 weblogic 上抛出 java.lang.NoClassDefFoundError

android - Java.lang.NoClassDefFoundError : Failed resolution of: Lorg/apache/http/entity/ContentType;

java - Spring MVC 中的日期序列化

javascript - AngularJS 中传递的 Java REST API URL 不起作用

java - scalac v javac 和 scala v java

Java 代码在 Eclipse 中工作正常,但 jar 文件抛出错误