java - getResourceAsStream 在 Eclipse IDE 中有效,但在 JAR 格式中无效

标签 java jar inputstream bufferedimage javax.imageio

这是一个非常常见的错误,因为有很多关于它的线索,但我不确定是否因为我的情况与所有人的情况略有不同,所以解决方案是否行不通?

基本上,我处于 eclipse 状态。我有一个名为 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 出了问题,但无济于事。

提前感谢您提供的所有帮助。我讨厌这样重复,但到目前为止还没有解决方案。如果我没有提供任何重要信息,请告诉我。

最佳答案

Opening the jar, my MANIFEST.MF has a version of 1.0 and a classpath of just plain ., which I thought was correct for this kind of thing?

没有。 JAR 文件中的类路径条目命名其他 JAR 文件, 相对于此 jar 文件的位置。它不命名目录:

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

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

关于java - getResourceAsStream 在 Eclipse IDE 中有效,但在 JAR 格式中无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18068841/

相关文章:

java - 如果我逐字节读取文件的内容不应该保持不变吗?

java - ObjectInputStream 对 FileInputStream 满意,对 getResourceAsStream 不满意

java - 尝试在 if 语句内暂停程序执行 (Swing)

java - 如何在Android上实现OnClickListener

java - EXE4j Jar 到 exe 错误

java - "Force update of snapshots/releases"- 这是什么意思

Java 字节流。读操作有时读不到写入的内容

java - Java 中的隐式继承

java - 如何创建跨服务域模型映射?

java - 属性文件中的更改不会保存在 JAR 文件内