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