Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java简单项目处理资源_Java_Jar_Noclassdeffounderror - Fatal编程技术网

Java简单项目处理资源

Java简单项目处理资源,java,jar,noclassdeffounderror,Java,Jar,Noclassdeffounderror,我有一个简单的java项目和一个名为Constants的类 我将所有需要的路径存储在静态变量中,如下所示 例如: public static final String PLAYFIELD_SMALL_IMAGE_PATH = Constants.class.getClassLoader().getResource("Player_Small.png").getPath(); 只要我保持在Eclipse中,就可以正常工作;) 但当我将程序导出到JAR文件并启动它时,会出现一个异常: java.

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

我在这里找到了这个:

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

编辑2:

如果使用静态初始值设定项阻止ExceptionInInitializeError 立即抛出。没有静态初始化程序块,我可以 进入我的程序的第一个菜单

编辑3:

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

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

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

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

您可以做很多事情来解决这个问题,首先,我建议您使用maven并了解这一点(对于初学者,请查看),但是如果您想继续使用minimal java project,可以尝试以下方法:

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

这应该会有所帮助

您的问题正是:

public static final String PLAYFIELD_SMALL_IMAGE_PATH =  Constants.class.getClassLoader().getResource("Player_Small.png").getPath();
阅读本文:。本文解释了如何 来解决你的问题

我建议你把你所有的路都带出你的课程 进入另一个类而不使用静态变量。 也许使用URL而不是字符串路径,因为正如你提到的 你使用图像。图像需要找到URL,因为它们
不在硬盘上。如果您不使用URL,您的图像可能无法打印。

我认为您使用eclipseFile->Export->Runnable jar file->Choose Main and Export Path->Finish创建jar的方式存在问题。您可以检查jar tf | grep常量吗。。。并查看jar中是否存在该文件。在windows上不能使用grep命令,但在提取jar时,请使用Constants类exists@user2663778
grep
几乎适用于所有东西,包括Windows。尽管我还是会使用Cygwin.im实际上对maven非常熟悉,但我不会在这么小的项目中使用它。并使用Thread.currentThread()。。。。。导致相同的错误您是否检查了jar文件是否包含“Constants”类?是的,它包含Constants.classSo您是如何尝试使用“Thread.currentThread().getContextClassLoader().getResourceAsStream(Constants.file_name_blah_blah);”的?你的档案在哪里?也许可以尝试使用绝对路径作为初学者,看看是否有效?我使用了Thread.currentThread().getContextClassLoader().getResource(Constants.FileName).getPath();我的文件位于graphics/FileName下,graphics是我项目的一个资源文件夹