[英]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.