【发布时间】:2013-08-14 09:06:46
【问题描述】:
我有一个简单的 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:
如果我使用静态初始化程序块,则会出现 ExceptionInInitializerError 被立即抛出。没有静态初始化程序块我能够 进入我的程序的第一个菜单。
编辑 3:
也许是另一个提示!当我提取我的 jar 时,所有图形都直接在根文件夹中,所以 我尝试使用这样的相对路径:
public static final String PLAYFIELD_SMALL_IMAGE_PATH = "Player_Small.png";
但如果我这样做了,我的图形就不会加载。
【问题讨论】:
-
我觉得你用eclipse创建jar的方式有问题
-
文件 -> 导出 -> 可运行的 JAR 文件 -> 选择 Main 和 Export-Path -> 完成
-
你能检查 jar tf | grep Constants ... 查看jar中是否存在文件
-
不能在 windows 上使用 grep 命令,但是当我提取我的 jar 时,常量类存在
-
@user2663778
grep适用于几乎所有东西,包括 Windows。虽然我还是会使用 Cygwin。
标签: java jar noclassdeffounderror