Java奇怪的NullPointErexception

时间:2015-01-03 21:24:02

标签: java

嘿,我正在用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);

已经非常感谢那些花时间阅读的人。

2 个答案:

答案 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,它就不再为空,你可以在对象上调用一个方法