getResourceAsStream在Eclipse IDE中工作,但不在JAR格式中工作

时间:2013-08-05 22:27:21

标签: java jar inputstream bufferedimage javax.imageio

这是一个非常常见的错误,因为有很多关于它的线程,但我不确定,因为我的情况与所有情况略有不同,解决方案不起作用?

基本上,我正处于日蚀状态。我有一个名为src的源文件夹,然后我有一个包下来三个文件夹,然后是有问题的类。该类使用代码:

BufferedImage im = ImageIO.read(Thread.currentThread().getContextClassLoader().getResourceAsStream(filenames[x].concat(extension)));

被try / catch包围。 filenames是我正在加载的所有文件名的数组(此代码在for循环中多次运行),扩展名为".PNG"。这些图片位于另一个名为EngineTextures的源文件夹中。

运行此程序在Eclipse中运行良好!加载所有纹理,我的所有其他代码都运行!但是,我将其导出为可运行的jar并在命令提示符下运行它以收到所有这些错误的input == null错误,指向其中包含ImageIO.read(Thread.currentThread()的行。

踢球者之前就是在一个单独的项目中工作,当我甚至尝试重新导出该项目时,我在完全不变的代码上收到了相同的错误。这让我相信我有一些模糊的Eclipse设置改变了错误。

打开jar,我的MANIFEST.MF的版本为1.0,类路径只是普通的.,我认为这种方法是正确的吗? Main-Class指向正确的位置,我的所有图片都在META-INF文件夹旁边。

我看过的解决方案失败了:

getResourceAsStream working in eclipse, but not when run as applet in browser

Why does getResourceAsStream() work in the IDE but not the JAR?

Java IDE - Eclipse, Importing resources

Audio file in jar made by Eclipse IDE

getResourceAsStream() returning null in jar but fine in eclipse

此外,我完全删除了工作区,并将我的图片和代码重新复制到同一状态,想到可能有些.metadata错误,无济于事。

提前感谢您提供任何帮助。我不想这样重复,但到目前为止还没有解决办法。如果我没有提供任何重要信息,请告诉我。

1 个答案:

答案 0 :(得分:1)

  

打开jar,我的MANIFEST.MF有1.0的版本和一个简单的类路径,我觉得这样的东西是正确的吗?

没有。 JAR文件中的Class-Path条目相对于此jar文件的位置命名其他JAR文件。它没有命名目录:

"The value of this attribute specifies the relative URLs of the extensions or libraries that this application or extension needs."

这反过来意味着要通过getResourceAsStream()加载的资源必须在JAR文件中。