2

我有一个简单的 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:无法初始化类”错误

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

编辑2:

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

编辑 3:

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

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

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

4

2 回答 2

2

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

你可以做很多事情来解决这个问题,首先我建议使用 maven 并学习(对于初学者来说,在 5 分钟内查看Maven ),但是如果你想保持最小的 java 项目,那么你可以尝试以下方法:

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

那应该有帮助

于 2013-08-14T09:14:55.657 回答
1

你的问题正是:

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

阅读这篇文章:NoClassDefFoundError。本文解释了如何解决您的问题。

我建议您将所有路径从您的 Constants 类中移到另一个类中,而不在那里使用静态变量。并且可能使用 URL 而不是 String-Pathes,因为正如您所提到的,您使用的是图像。图像将需要定位 URL,因为它们不在 HDD 上。如果您不使用 URL,您的图像可能无法打印。

于 2013-08-15T10:29:56.990 回答