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

Java 试图使用ImageIO.read(class.getResource(URL))加载图像,但getResource返回null,java,bufferedimage,javax.imageio,getresource,Java,Bufferedimage,Javax.imageio,Getresource,我和我的朋友制作了一个2D游戏,通过一些Youtube教程,我学到了很多关于游戏开发的基本概念。我学到的一件事是精灵(对于那些不知道的人来说,2D图像可以渲染到屏幕上)以及如何在我的游戏中使用它们。我一直在使用ImageIO.read(this.class.getResource(pathToMySprite)),但出于某种原因,getResource()似乎正在返回null 我对路径做了一些修改,在它前面添加“/”,删除“/”,放置user.dir属性以查看它是否需要整个路径,我仍然得到相同的

我和我的朋友制作了一个2D游戏,通过一些Youtube教程,我学到了很多关于游戏开发的基本概念。我学到的一件事是精灵(对于那些不知道的人来说,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;
}
非常感谢您的帮助。 我没有对代码进行评论(我通常在到达可以坐下来对完成的内容感到满意的地方时进行评论),但这是一个非常小的类,所以我认为你们能够很好地理解正在发生的事情

保存图像的文件夹位于我的项目的类路径中。 我还包括了错误:

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)
线程“thread-2”java.lang.ExceptionInInitializeError中的异常 位于com.brickbattle.client.src.gui.Sprite。(Sprite.java:7) 位于com.brickbattle.client.src.objs.Tile.(Tile.java:67) 位于com.brickbattle.client.src.objs.Player.initPlayerNum(Player.java:19) 位于com.brickbattle.client.src.util.brickbattle.init(brickbattle.java:114) 位于com.brickbattle.client.src.util.brickbattle.run(brickbattle.java:85) 位于java.lang.Thread.run(未知源) 原因:java.lang.IllegalArgumentException:input==null//这是一个错误 位于javax.imageio.imageio.read(未知源) 位于com.brickbattle.client.src.gui.SpriteSheet.(SpriteSheet.java:17) 位于com.brickbattle.client.src.gui.SpriteSheet.(SpriteSheet.java:8)
再次感谢

这个问题基本上与ImageIO无关,而是如何
/
类加载器.getResource
getResourceAsStream
工作

有关说明,请参阅

在任何情况下,这些获取资源的方法只能从类路径读取(即,
user.dir

这应该起作用:

ImageIO.read(getClass().getResource("/path/to/resource"));
其中路径相对于类路径的根(由前导/)指定)

如果资源不在类路径上,只需使用:

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

其中,路径相对于启动应用程序的目录

这篇文章可能会有所帮助:不要使用
This.class.getResource()
try
getClass().getResource()