- 此问题在此处已有答案**:
getResourceAsStream returns null(26个答案)
3天前关闭。
我试着用getResourceAsStream
获取一个图像,然后放入InputStream
,但是值仍然是return null。
public static BufferedImage GetSpriteAtlas(String fileName) {
BufferedImage img = null;
InputStream is = LoadSave.class.getResourceAsStream("/" + fileName);
try {
img = ImageIO.read(is);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return img;
}
这是我设计的树。
-Project
-src
-main
-java
-utilities
-LoadSave.java
-resources
-image.png
1条答案
按热度按时间a14dhokn1#
运行
System.out.println(LoadSave.class.getResource("LoadSave.class"));
,它会告诉你它在找什么。然后确保你的图像在同一个地方。所以,如果,比方说,这打印了这样的东西:
然后,上面的代码将在
mygame.jar
中查找条目/image.png
。确保它在那里。或者,如果它在那里,但在不同的路径中,例如,在/img/image.png
中,编辑对"/img/" + fileName
的调用。确保也打印它("/" + fileName
)并且记住大小写很重要,它必须精确匹配,并且资源文件中的点不能超过1个(save_icon.png
很好。save.icon.png
由于愚蠢的遗留原因而不起作用)。此外,您使用的是15年前过时的java构造,这更简单、更短,也更难意外导致资源泄漏:
try-with更简单、更安全。"捕捉异常,运行
e.printStackTrace()
,然后盲目地继续"的范例非常有害,当只发生一个错误时,会在日志中导致大量错误(想一想--发生了意想不到的事情,所以,你......打印一份报告,然后继续写下去?不要继续写下去!)--让你写糟糕的代码,然后导致愚蠢的抱怨("哦,不,javanull
很烦人--实际上,它并不烦人,但如果你一直编写通过将错误打印到控制台并返回null来对错误做出React的方法,是的,那么它会变得很烦人。干脆停止这样做吧)。注:您可以使用任何zip工具或
jar tvf mygame.jar
检查jar文件的内容,如果映像根本不在其中,则您的构建失败,我建议您发布一个新问题,发布您的构建过程(例如pom.xml
或build.gradle
或诸如此类的,以及您运行什么命令来构建您的jar),发布您的jar包含什么,发布您想要的,并发布项目的基本结构(例如,posix终端环境中find
命令的输出)。