首页 > 解决方案 > Java - 方法调用“添加”将产生“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'”。当我查看实际的游戏板列表时,我发现它是空的,我确信它与警告有关。现在有人为什么在构造函数中调用警告吗?

标签: java

解决方案


GameBoard 应初始化为:

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

而且此文件路径可能不是您要获取的确切路径。尝试确保您正在阅读确切的文件位置。

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

推荐阅读