I need some help with a mysterious NullPointerException being thrown whenever I try to add an ArrayList populated with rectangles to a Pane using 'simulationPane.getChildren().addAll(wallList)'. I have tried a similar thing using an array of rectangles with the same results.
Absolutely any help is appreciated!
public class SimulationManager extends Application{
public static int currentTime;
public int agentNumber = 0;
public int initialFear = 0;
public Pane simulationPane;
public HBox controlPane;
public GridPane gridPane;
public BorderPane borderPane;
public boolean isPaused = false;
GenericAgent[] agentList;
ArrayList<Rectangle> wallList = new ArrayList<Rectangle>();
Rectangle wall1;
Rectangle wall2;
Rectangle wall3;
Rectangle wall4;
Rectangle wall5;
public static void main(String[] args) {
    Application.launch( args);
}
public void createOneRoom() {
    Rectangle wall1 = new Rectangle(0, 0, 500, 20);
    Rectangle wall2 = new Rectangle(0, 500, 20, 500);
    Rectangle wall3 = new Rectangle(500, 500, 500, 20);
    Rectangle wall4 = new Rectangle(0, 0, 20, 200);
    Rectangle wall5 = new Rectangle(300, 0, 20, 200);
    wallList.add(wall1);
    wallList.add(wall2);
    wallList.add(wall3);
    wallList.add(wall4);
    wallList.add(wall5);
    System.out.print(wallList);
}
public void createTwoRooms() {
    //wallList = new Rectangle[13];
    Rectangle room1Wall1 = new Rectangle();
    Rectangle room1Wall2 = new Rectangle();
    Rectangle room1Wall3 = new Rectangle();
    Rectangle room1Wall4 = new Rectangle();
    Rectangle room1Wall5 = new Rectangle();
    Rectangle room2Wall1 = new Rectangle();
    Rectangle room2Wall2 = new Rectangle();
    Rectangle room2Wall3 = new Rectangle();
    Rectangle room2Wall4 = new Rectangle();
    Rectangle room2Wall5 = new Rectangle();
    Rectangle corridor1 = new Rectangle();
    Rectangle corridor2 = new Rectangle();
    Rectangle corridor3 = new Rectangle();
    wallList.add(room1Wall1);
    wallList.add(room1Wall2);
    wallList.add(room1Wall3);
    wallList.add(room1Wall4);
    wallList.add(room1Wall5);
    wallList.add(room2Wall1);
    wallList.add(room2Wall2);
    wallList.add(room2Wall3);
    wallList.add(room2Wall4);
    wallList.add(room2Wall5);
    wallList.add(corridor1);
    wallList.add(corridor2);
    wallList.add(corridor3);
}
public void createThreeRooms() {
}
public void createCornerRoom() {
}
public void startSimulation(int agentNumber, int initialFear, String level) {
    agentList = new GenericAgent[agentNumber];
    ArrayList<Rectangle> wallList = new ArrayList<Rectangle>();
    //wallList = new Rectangle[50];
    for (int i = 0; i < agentNumber; i++) {
        if (Math.random() < 0.5) {
            agentList[i] = new StandardAgent();
            agentList[i].setFear(initialFear);
        }
        else if(Math.random() < 0.75) {
            agentList[i] = new GentleAgent();
        }
        else {
            agentList[i] = new AggrAgent();
        }
    }
    if (level == "One room") {
        createOneRoom();
        System.out.println("A single room was created");
    } else if (level == "Two rooms") {
        createTwoRooms();
        System.out.println("Two rooms were created");
    } else if (level == "Three rooms") {
        createThreeRooms();
        System.out.println("Three rooms were created");
    } else if (level == "Corner room") {
        createCornerRoom();
        System.out.println("A single corner room was created");
    }
    simulationPane.getChildren().addAll(wallList);
    for (Rectangle wall : wallList) {
        wall.setFill(Color.DARKGREY);
    }
    System.out.println("Number of agents created: " + agentList.length);
}
public void resetSimulation() {
    agentNumber = 0;
    initialFear = 0;
    isPaused = false;
    //TODO Remove all agents and walls.
}
//****************************************************************GUI**********************************************************************************//
@Override
public void start(Stage primaryStage) {
    BorderPane borderPane = new BorderPane();
    GridPane gridPane = new GridPane();
    gridPane.setAlignment(Pos.CENTER);
    Pane simulationPane = new Pane();
    simulationPane.setPrefSize(500, 500);
    HBox controlPane = new HBox();
    Scene menuScene = new Scene(borderPane);
    primaryStage.setTitle("Agent-Based Fear Simulation");
    primaryStage.setScene(menuScene);
    primaryStage.show();
    gridPane.setStyle("-fx-background-color: black;");
    gridPane.setAlignment(Pos.CENTER);
    gridPane.setVgap(15);
    gridPane.setHgap(5);
    MenuBar menuBar = new MenuBar();
    Menu menuFile = new Menu("File");
    MenuItem miMenu = new MenuItem("Return to menu");
    MenuItem miSave = new MenuItem("Save");
    MenuItem miLoad = new MenuItem("Load");
    MenuItem miClose = new MenuItem("Close                   ");
    miMenu.setOnAction(e -> {
        borderPane.setCenter(gridPane);
        borderPane.setBottom(null);
        resetSimulation();
    });
    miClose.setOnAction(e -> {Platform.exit();});
    miSave.setOnAction(e -> {save();});
    miLoad.setOnAction(e -> {selectFile();});
    menuFile.getItems().addAll(miMenu, miSave, miLoad, miClose);
    menuBar.getMenus().add(menuFile);
    borderPane.setTop(menuBar);
    borderPane.setCenter(gridPane);
    Text agentText = new Text("Type in the number of agents:");
    agentText.setFill(Color.WHITE);
    gridPane.add(agentText, 0, 2);
    Text fearText = new Text("Type in the initial fear value:");
    fearText.setFill(Color.WHITE);
    gridPane.add(fearText, 0, 4);
    Text levelText = new Text("Select the environment:");
    levelText.setFill(Color.WHITE);
    gridPane.add(levelText, 0, 6);
    Button startButton = new Button("Start the simulation");
    gridPane.add(startButton, 1, 0);
    /*Button testButton = new Button("Test");
    simulationPane.getChildren().add(testButton);
    Rectangle testRectangle = new Rectangle(10,10,10,10);
    simulationPane.getChildren().add(testRectangle);*/
    Button pauseButton = new Button("Pause/Play");
    controlPane.getChildren().add(pauseButton);
    pauseButton.setOnAction(e -> {isPaused = !isPaused;});
    TextField agentNumberBox = new TextField();
    gridPane.add(agentNumberBox, 1, 2);
    TextField initialFearBox = new TextField();
    gridPane.add(initialFearBox, 1, 4);
    final ComboBox<String> levelBox = new ComboBox<String>();
    levelBox.getItems().addAll("One room", "Two rooms", "Three rooms", "Corner room");
    gridPane.add(levelBox, 1, 6);
    levelBox.getSelectionModel().selectFirst();
    /* As the user I want to be able to set the agent number
     * As the user I want to be able to set the initial fear values
     * As the user I want to be able to pick the simulation environment
     * As the user I want to have a menu with all of the main functions of the simulation
     */
    startButton.setOnAction(e -> {
        try {
        agentNumber = Integer.parseInt(agentNumberBox.getText());
        initialFear = Integer.parseInt(initialFearBox.getText());
        String level = levelBox.getValue();
        borderPane.setCenter(null);
        borderPane.setCenter(simulationPane);
        borderPane.setBottom(controlPane);
        startSimulation(agentNumber, initialFear, level);
        } catch(NumberFormatException error) {
            System.out.println("Error caught:  wrong data type used.");
            Alert alert = new Alert(AlertType.ERROR);
            alert.setTitle("Error Initializing");
            alert.setHeaderText("Oops, an error has been caught!");
            alert.setContentText("Please use integers for the number of agents and the initial fear value.");
            alert.showAndWait();
        }
    });
}
public void save() {
}
//  User Story:  As the user, I want to be able to select the file to load.
public void selectFile() {
    FileChooser fileChooser = new FileChooser();
    fileChooser.setTitle("Open Simulation File");
    fileChooser.getExtensionFilters().addAll(
             new ExtensionFilter("Comma Separated Values", "*.csv"));
     File selectedFile = fileChooser.showOpenDialog(null);
     if (selectedFile != null) {
       loadFile(selectedFile);
     }
}
public void loadFile(File selectedFile) {
}
}
 
    