Java - 方法调用"add"将产生"NullPointerException"



我正试图为我正在制作的一个基本文本游戏读取JSON文件,但当我试图将JSON转换为POJO时,我收到了警告。我的Json看起来如下:

{ "rooms": [
{
"roomCoordinates": [0, 0],
"availableDoors": ["east"],
"unavailableDoors":  [],
"items":  []
}
]
}

我的Room对象和包装器类如下所示:

import java.util.ArrayList;
public class Room {
private int[] roomCoordinates;
private ArrayList<String> availableDoors;
private ArrayList<String> unavailableDoors;
private ArrayList<String> items;
public Room(int[] currentRoomCoordinates, ArrayList<String> currentAvailableDoors,
ArrayList<String> currentUnavailableDoors, ArrayList<String> currentItems){
this.roomCoordinates = currentRoomCoordinates;
this.availableDoors = currentAvailableDoors;
this.availableDoors = currentUnavailableDoors;
this.items = currentItems;
}
public int[] getRoomCoordinates(){
return roomCoordinates;
}
public ArrayList<String> getAvailableDoors(){
return availableDoors;
}
public ArrayList<String> ungetAvailableDoors(){
return unavailableDoors;
}
public ArrayList<String> getItems(){
return items;
}
}

public class GameBoard {
private List<Room> gameBoard = new ArrayList<>();
public GameBoard(int[] roomCoordinates, ArrayList<String> availableDoors,
ArrayList<String> unavailableDoors, ArrayList<String> items){
gameBoard.add(new Room(roomCoordinates, availableDoors, unavailableDoors, items));
System.out.println(gameBoard);
}
public Room getRoom(int i){
return gameBoard.get(i);
}
public List<Room> getGameBoard(){
return gameBoard;
}
}

我实际运行的初始化代码如下:

@Test
public void setUp() {
try {
Gson gson = new Gson();
Reader reader = Files.newBufferedReader(Paths.get("src/main/java/student/adventure/Rooms.json"));
GameBoard board = gson.fromJson(reader, GameBoard.class);
reader.close();
System.out.println(board.getGameBoard());
Room room = board.getRoom(0);
} catch (NullPointerException e) {
System.out.println(e.getMessage());
} catch (IOException e) {
System.out.println(e.getMessage());
}
}

我在GameBoard构造函数中收到警告,说";方法调用"add"将产生"NullPointerException";。当我查看实际的游戏板列表时,我发现它为空,我确信这与警告有关。现在有人知道为什么在构造函数中调用警告吗?

GameBoard应该用初始化

private List<Room> gameBoard = new ArrayList<>();

这个文件路径可能不是你想要得到的确切路径。请尝试确保您正在读取准确的文件位置。

Reader reader = Files.newBufferedReader(Paths.get("src/main/java/student/adventure/Rooms.json"));

相关内容

最新更新