从自定义类调用方法时出现java.lang.NullPointerException错误

时间:2015-02-28 06:52:41

标签: java

在自定义类上调用方法时,我得到一个空指针异常。当我在我的驱动程序上调用我的Map构造函数时,我得到一个NPE错误。我在Map.java中初始化我的2D数组字段

public class Map {
private Field[][] gameMap;
private int row, col;
private int rowPlayer, colPlayer;
 public Map(){
     gameMap = new Field[10][20];
     rowPlayer = 0;
     colPlayer = 0;
     gameMap[rowPlayer][colPlayer].setPlayerLoc(); //NPE happens here
 }
 }

这是Field.java

public class Field {
private int playerLoc;
private char fieldType;
private int plantedDay, readyDay;
private char typeOfCrop;
public Field(){
    fieldType = 'u';
    playerLoc = 0;
    plantedDay = 0;
}
public void setFieldUntilled(){
    fieldType = 'u';
}
public void setFieldTilled(){
    fieldType = 't';
}
public void setPlayerLoc(){
    playerLoc = 1;
}
public void removePlayerLoc(){
    playerLoc = 0;
}
public int getPlayerLoc(){
    return playerLoc;
}
public void setPlantDay(int Day){
    plantedDay = Day;
}
public void setReadyDay(int x){
    readyDay = x;
}
}

我想知道如何修复它以及NPE发生的原因。谢谢!

2 个答案:

答案 0 :(得分:2)

您必须初始化gameMap[rowPlayer][colPlayer],因为它包含null:

 public Map(){
     gameMap = new Field[10][20];
     rowPlayer = 0;
     colPlayer = 0;
     gameMap[rowPlayer][colPlayer] = new Field();
     gameMap[rowPlayer][colPlayer].setPlayerLoc();
 }

答案 1 :(得分:2)

我们每天看N次的旧新手阵列问题:

您创建一个填充了null s。

的二维数组
   gameMap = new Field[10][20];

您从数组中获取值(当然为null)并尝试访问字段。

   gameMap[rowPlayer][colPlayer].setPlayerLoc();

失败是因为您无法访问null字段。 NullPointerException随之而来。

解决方案:您需要为每个阵列单元创建并分配新的Field实例。