gpt4 book ai didi

java - 尝试使用 ImageIO.read(class.getResource(URL)) 加载图像,但 getResource 返回 null

转载 作者:搜寻专家 更新时间:2023-11-01 02:27:58 24 4
gpt4 key购买 nike

我一直在和我的伙伴一起制作 2D 游戏,并且我通过一些 Youtube 教程学习了很多关于一些基本游戏开发概念的知识。我正在学习的其中一件事是 Sprite (对于那些不知道的,2D 图像渲染到屏幕)以及如何在我的游戏中使用它们。我一直在使用 ImageIO.read(this.class.getResource(pathToMySprite)) 但似乎 getResource() 正在返回 null一些原因。

我一直在弄乱路径,在它前面添加“/”,删除“/”,放置 user.dir 属性以查看它是否需要整个路径,我仍然得到同样的错误。

TILE_TEXTURES(System.getProperty("user.dir") + "/textures/tile.png");
//ENTITY_TEXTURES("/textures/entity.png");
private BufferedImage img;

private SpriteSheet(String path) {

System.out.println(System.getProperty("user.dir"));
try {
//TODO: Fix this error, don't know what's wrong.
img = ImageIO.read(SpriteSheet.class.getResource(path)); // error here!!!
} catch (IOException e) {
e.printStackTrace();
}
}

public BufferedImage getImage() {
return img;
}

感谢任何帮助。我还没有评论代码(我通常会在我到达可以坐下来对我完成的事情感到满意的地方时这样做)但这是一个非常小的类(class)所以我认为你们能够理解什么是一切顺利。

保存图像的文件夹 IS 在我的项目的类路径中。我还包含了错误:

Exception in thread "Thread-2" java.lang.ExceptionInInitializerError
at com.brickbattle.client.src.gui.Sprite.<clinit>(Sprite.java:7)
at com.brickbattle.client.src.objs.Tile.<init>(Tile.java:67)
at com.brickbattle.client.src.objs.Player.initPlayerNum(Player.java:19)
at com.brickbattle.client.src.util.BrickBattle.init(BrickBattle.java:114)
at com.brickbattle.client.src.util.BrickBattle.run(BrickBattle.java:85)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalArgumentException: input == null! //HERE IS ERROR
at javax.imageio.ImageIO.read(Unknown Source)
at com.brickbattle.client.src.gui.SpriteSheet.<init>(SpriteSheet.java:17)
at com.brickbattle.client.src.gui.SpriteSheet.<clinit>(SpriteSheet.java:8)

再次感谢!

最佳答案

这个问题基本上与 ImageIO 无关,而是与 Class/ClassLoader.getResourcegetResourceAsStream 如何工作有关。

有关解释,请参阅 this answer .

无论如何,这些获取资源的方法只能从类路径中读取(即user.dir 在这里无济于事)。

这应该有效:

ImageIO.read(getClass().getResource("/path/to/resource"));

路径相对于类路径的(由前导/指定)。

如果您的资源不在类路径中,只需使用:

ImageIO.read(new File("path/to/resource");

路径相对于您的应用程序从中启动的目录

关于java - 尝试使用 ImageIO.read(class.getResource(URL)) 加载图像,但 getResource 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17002906/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com