我正在尝试读取图像并将其存储为整数数组,以便将其显示在屏幕上。我不知道是什么导致我的代码返回这个空指针异常,我希望有人可以对它有所了解。
以下是加载方法的代码:
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];
}
}
有没有人可以解释为什么会出现这种错误?
答案 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更详细地解释了它。