尝试读取图像并获取空指针异常

时间:2014-02-01 04:37:07

标签: java image

我正在尝试读取图像并将其存储为整数数组,以便将其显示在屏幕上。我不知道是什么导致我的代码返回这个空指针异常,我希望有人可以对它有所了解。

以下是加载方法的代码:

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

import javax.imageio.ImageIO;

public class TextureUI {

    private int width = 800, height = 600;
    public int[] pixels = new int[width*height];

    public void load(String path) {
        try {
            BufferedImage image = ImageIO.read(TextureUI.class.getResource(path));
            int w = width;
            int h = height;
            image.getRGB(0, 0, w, h, pixels, 0, w);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

我在这里使用它:

private Render ui;
private TextureUI texui;

public Screen(int width, int height) {
    super(width, height);
    ui = new Render(width, height);
            //Here is where my code is null pointing 
    texui.load("ui/hands.png"); // < That function call
    for (int i = 0; i < (width * height); i++) {
        ui.pixels[i] = texui.pixels[i];
    }
}

有没有人可以解释为什么会出现这种错误?

2 个答案:

答案 0 :(得分:4)

您的texui属性为null(不是instanciated),您尝试从中调用方法。你应该在调用它的“加载”方法之前实例化你的texui。

将以下代码放在Screen构造函数中:

texui = new TextureUI();
texui.load("ui/hands.png"); 

答案 1 :(得分:3)

如果路径

ui/hands.png

是相对于类路径的 root ,那么您应该将其更改为

/ui/hands.png

如果您向/方法提供没有前导Class#getResource(String)的路径,则会使用调用它的Class的包。例如,如果TextureUI在包com.graphics中,那么Java将在

中查找资源
com/graphics/ui/hands.png

相对于类路径的根。

javadoc更详细地解释了它。