无法找到图像

时间:2013-12-01 23:48:03

标签: java image null buffer javax.imageio

我一直在关注制作2D游戏的教程。我已经得到了创建窗口并着色它​​,设置键盘输入,但现在我试图导入图像。在这个视频的共鸣中http://www.youtube.com/watch?v=o7pfq0W3e4I,似乎其他人都有同样的问题。 主类中的代码行:

private SpriteSheet spriteSheet = new SpriteSheet("/spritesheet.png");

SpriteSheet类的代码:

package GFX;

import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.imageio.ImageIO;

 public class SpriteSheet {

public String path;
public int width;
public int height;

public int[] pixels;

public SpriteSheet(String path){
    BufferedImage image = null;

    try {
        image = ImageIO.read(SpriteSheet.class.getResourceAsStream(path));
    } catch (Exception e) {
        System.out.println("Cant find image");
    }

    if(image == null){ 
        return;
    }

    this.path = path;
    this.width = image.getWidth();
    this.height = image.getHeight();

    pixels = image.getRGB(0,0,width,height,null,0,width);   //0xffABCdAs

    for(int i = 0;i<pixels.length;i++){
        pixels[i] = (pixels[i] & 0xff)/64;
    }

    for(int i = 0;i<16;i++){
        System.out.println(pixels[i]);
    }



}

}

我已经找到了所有不同的目录,即使是从harddrvie开始的目录,但仍然没有,它只是返回“找不到图像”,如try-catch中所示。教程就像

一样
            try {   image =    ImageIO.read(SpriteSheet.class.getResourceAsStream(path));
        } catch (IOException e) {
            e.printStackTrace();
        }

这不起作用并返回此错误:

Exception in thread "main" java.lang.IllegalArgumentException: input == null!
at javax.imageio.ImageIO.read(ImageIO.java:1348)
at GFX.SpriteSheet.<init>(SpriteSheet.java:20)
at inputHandling.Game.<init>(Game.java:23)
at inputHandling.Game.main(Game.java:128)

评论中的很多人也发布了这个错误,当我在主类中注释掉路径时,程序运行但没有找到图像。 感谢。

1 个答案:

答案 0 :(得分:1)

一个简单的解决方案如下:

更改

private SpriteSheet spriteSheet = new SpriteSheet("/spritesheet.png");

private SpriteSheet spriteSheet = new SpriteSheet("spritesheet.png");

然后将spritesheet.png放在与SpriteSheet类相同的Java包或文件夹中。

Class.getResourceAsStream()在类路径中查找资源,这就是为什么只要图像在类路径上,它就可以工作。