嘿,我正在用java制作游戏,在加载瓷砖表时,我得到了一个奇怪的错误,我无法找到原因。
public class TileSheetLoader {
BufferedImage tileSheet;
int width;
int height;
int rows;
int cols;
public BufferedImage[] tiles;
public void loader(int width, int height, int rows, int cols)
{
try
{
ImageIO.read(new File("gfx/tileSheet.png"));
}catch(Exception e){System.out.println("Couldent load tileSheet.png");}
this.width = width;
this.height = height;
this.rows = rows;
this.cols = cols;
this.tiles = new BufferedImage[rows * cols];
for(int i = 0; i < rows; i++)
{
for(int j = 0; j < cols; j++)
{
tiles[(i * cols) + j] = tileSheet.getSubimage(i * width, j * height, width, height);
System.out.println("loaded tile");
}
}
}
}
这是班级的代码。 我在这一行得到了NullPointException
tiles[(i * cols) + j] = tileSheet.getSubimage(i * width, j * height, width, height);
这就是我称之为方法的地方。
tilesheetloader.loader(96, 32, 1, 3);
已经非常感谢那些花时间阅读的人。
答案 0 :(得分:5)
您没有为tileSheet
分配内存。
记住:必须使用new
分配复杂数据类型。
我认为您想要这样做,但忘记捕捉ImageIO.read()
的回复:
tileSheet = ImageIO.read(new File("gfx/tileSheet.png"));
答案 1 :(得分:1)
tileSheet
永远不会使用new
关键字进行实例化,因此它为null,并且您在空值上调用方法...因此NPE
可能你要做的就是将ImageIO.read()
填入tileSheet
...一旦你将ImageIO.read()
的返回值放入tileSheet
,它就不再为空,你可以在对象上调用一个方法