1

所以这是我抛出 NullPointerException 的代码的一部分:

public class PuzzleGame extends GraphicsProgram implements KeyListener{
        private ArrayList <PuzzleImage> list = new ArrayList <PuzzleImage>();
        private PuzzleImage _11=null;

    public static void main(String[] args) {
            PuzzleGame game= new PuzzleGame();
            game.setup();  //NullPointerException here
            game.addKeyListener(game);
        }

     private void setup(){
            BufferedImage img11 = null;
            try {
                img11 = ImageIO.read(new File("C://part11.png"));
            } catch (IOException e) {
            }
            PuzzleImage _11=new PuzzleImage(img11,2,2,2,2);  //NullPointerException here
            list.add(_11);
    }
}

这是 PuzzleImage 类

public class PuzzleImage extends GImage {
    public PuzzleImage(Image img, double x1, double y1, double realX, double realY) {
        super(img, x1, y1);  //NullPointerException here
        x=x1;
        y=y1;
    }
    private double x;
    private double y;
    private double realX;
    private double realY;
}

所以我确保 C 上有名为 part11.png 的文件,所以我猜路径应该是正确的。现在我真的不知道这段代码有什么问题,但是我对 java 很陌生,所以很可能有一些我不知道或没见过的东西。也许你们中的一些人可以看看,看看你能找到什么吗?谢谢。

已解决:原来我要添加的 12 张图片中只有 .jpg,而不是 .png。时间不早了,不好意思打扰各位了。

4

2 回答 2

1

很可能img11in setup()is null,因为您在其分配周围有一个 try catch 块。如果您的代码获得 IOException,您的代码不会中断,但也不会img11被分配任何值并继续保持为空。

尝试打印错误消息以验证您是否收到 IO 异常。

因此,将您的代码更改为这样的...

private void setup(){
            BufferedImage img11 = null;
            try {
                img11 = ImageIO.read(new File("C://part11.png"));
            } catch (IOException e) {
                e.printStackTrace() //ADD THIS LINE
            }
            PuzzleImage _11=new PuzzleImage(img11,2,2,2,2);  //NullPointerException here
            list.add(_11);
    }

如果您看到正在打印的错误消息,您将知道问题很可能与img11.

另外,我猜您正在使用以下 JDK API http://docs.oracle.com/javase/6/docs/api/javax/imageio/ImageIO.html#read( java.io.File),它明确指出如果输入为空就会抛出错误...

公共静态 BufferedImage 读取(文件输入)抛出 IOException

参数: input - 要读取的文件。返回: 包含输入的解码内容的 BufferedImage,或 null。

抛出: IllegalArgumentException - 如果输入为空。IOException - 如果在读取过程中发生错误。

于 2013-03-03T07:50:40.203 回答
0

PuzzleImage _11=new PuzzleImage(img11,2,2,2,2);

试试这样:

_11=new PuzzleImage(img11,2,2,2,2);

一般情况下,NullPointerException仅在此类型引起。

于 2013-03-03T08:06:48.033 回答