繁体   English   中英

制作GImage时获取NullPointerException

[英]Getting NullPointerException when making GImage

因此,这是抛出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。 我想来晚了,很抱歉打扰你们。

setup()中的img11很可能为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( )使用ImageIO.read(FIle)方法java.io.File) ,它明确指出如果输入为null,则会引发错误。

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

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

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

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

像这样尝试:

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

通常, NullPointerException仅在这种类型下引起。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM