使用ImageIO.read输入== null

时间:2017-11-24 16:23:04

标签: java

以下是我正在使用的代码:

/**
 * This method loads an image
 * 
 * @param path - path of the image
 * 
 * 
 */
public static BufferedImage loadImage(String path) {
    try {
        return ImageIO.read(ImageLoader.class.getClass().getResourceAsStream(path));
    } catch (IOException e) {
        e.printStackTrace();
        System.exit(1);
    }
    return null;
}

这是错误:

  

线程“Thread-2”中的异常java.lang.IllegalArgumentException:   输入== null!
  在javax.imageio.ImageIO.read(未知来源)
  在io.deadspace.graphics.ImageLoader.loadImage(ImageLoader.java:19)
  at io.deadspace.graphics.asset.assets.EntityAssets.initEntityAssets(EntityAssets.java:15)
  在io.deadspace.graphics.asset.Assets.init(Assets.java:37)
  在io.deadspace.Game.init(Game.java:73)
  在io.deadspace.Game.run(Game.java:127)
  在java.lang.Thread.run(未知来源)

我最近重新按照我将图像加载到游戏中的方式,它之前运行良好,但现在,它不再起作用了。我已经尝试了getResource和getResourceAsStream。

以下是我如何加载图片的一些示例:

public void initEntityAssets() {
    sheet = new SpriteSheet(ImageLoader.loadImage("res/textures/sheet.png"));

    wood = sheet.crop(width, height, width, height);
    tree = sheet.crop(0, 0, width, height * 2);
    rock = sheet.crop(0, height * 2, width, height);
    rockDropItem = sheet.crop(1, height * 2, width, height);

}

public void initHotbarAssets() {
    sheet = new SpriteSheet(ImageLoader.loadImage("res/textures/sheet.png"));

    hotbar = sheet.crop(0, height * 4, width, height);
    hotbar_selected = sheet.crop(0, height * 5, width, height);
}

2 个答案:

答案 0 :(得分:0)

你的路径应该是相对于类路径的根,所以它应该是

sheet = new SpriteSheet(ImageLoader.loadImage("/res/textures/sheet.png"));

答案 1 :(得分:0)

如果res在项目结构的java文件夹中,则必须使用:

 ImageLoader.class.getClassLoader().getResourceAsStream(path)

原因在这里描述:

Difference between getClass().getClassLoader().getResource() and getClass.getResource()?

另一种解决方案,而不是使用getClassLoader(),在路径中添加斜杠,以便开始在根路径中搜索。

/res/something

而不是res / something