我有一个简单的 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/