制作GImage时获取NullPointerException

时间:2013-03-03 07:46:32

标签: java image nullpointerexception acm-java-libraries

所以这是我的代码的一部分,抛出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。我猜它已经迟到了,我很抱歉打扰你们。

2 个答案:

答案 0 :(得分:1)

img11中的setup()很可能是null,因为你有一个围绕其赋值的try catch块。如果您的代码获得IOException,您的代码将不会中断,但img11都不会被赋值任何值并继续保持为null。

尝试打印出错误消息,以验证您是否收到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)中的ImageIO.read(FIle)方法,该方法明确指出如果输入为空则将抛出错误...

  

<强>读

     

public static BufferedImage read(文件输入)                             抛出IOException

     

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

     

引发:IllegalArgumentException - 如果输入为null。 IOException - 如果   阅读过程中出错。

答案 1 :(得分:0)

PuzzleImage _11 =新的PuzzleImage(img11,2,2,2,2);

试试这样:

_11 =新的PuzzleImage(img11,2,2,2,2);

通常,NullPointerException仅由此类型引起。