Java Simple Project处理资源

时间:2013-08-14 09:06:47

标签: 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:

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

编辑3:

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

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

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

2 个答案:

答案 0 :(得分:2)

首先解压你的jar并检查是否所有类都在那里。

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

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

那应该有帮助

答案 1 :(得分:1)

你的问题正是如此:

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

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

我建议你从Constants课程中取出所有的课程 进入另一个类而不使用静态变量。 并且可能使用URL而不是String-Pathes,因为正如您所提到的那样 你使用图像。图像需要定位URL,因为它们 不在硬盘上。如果您不使用URL,则可能无法打印图像。