java - 制作 GImage 时出现 NullPointerException

标签 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。我想时间已经很晚了,抱歉打扰你们了。

最佳答案

setup() 中的 img11 很可能为 null,因为您有一个 try catch block 围绕其赋值。如果您的代码收到 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) 方法,它明确指出如果输入为 null,则会抛出错误...

read

public static BufferedImage read(File input) throws IOException

Parameters: input - a File to read from. Returns: a BufferedImage containing the decoded contents of the input, or null.

Throws: IllegalArgumentException - if input is null. IOException - if an error occurs during reading.

关于java - 制作 GImage 时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15183565/

相关文章:

java - Java Object Reference 发布不当

java - 识别最少使用的图标/文件/文件夹

java - 线程异常 "AWT-EventQueue-0"错误

android - 帮助解决 API 级别 5 上的 NullPointerException

java - 在 java 中查找所有带有正则表达式的主机帖子

java - 使用线程在同一个 jframe 上执行操作

android - 使用 ImageView 自定义可绘制对象

ios - 在tableview中延迟加载图像

关于绘图和图像( Canvas 、SVG)的 HTML5 建议

android - 即使在定义 @NonNull 之后,mLastKnownLocation 也是空的