有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

以下是加载方法的代码:

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) 个答案

  1. # 1 楼答案

    您的texui属性为null(未实例化),您试图从中调用一个方法。在调用texui的“load”方法之前,应该实例化它

    在屏幕构造器中输入以下代码:

    texui = new TextureUI();
    texui.load("ui/hands.png"); 
    
  2. # 2 楼答案

    如果这条路

    ui/hands.png
    

    相对于类路径的,则应将其更改为

    /ui/hands.png
    

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

    com/graphics/ui/hands.png
    

    相对于类路径的根

    这个javadoc更详细地解释了它