NullPointerException, когда я меняю сцену в JAVAFX

Я хочу изменить сцены на своей сцене или закрыть сцену, когда я нажимаю кнопку запуска игры и кнопку выхода из игры, но она просто показывает мне первую сцену, и когда я пытаюсь нажать одну из этих кнопок, компилятор закрывает в случае исключения NullPointerException.

У меня также есть основной класс и два fxml-файла, но я думаю, что нет необходимости помещать его здесь, он содержит только две панели привязки, примитивные метки и кнопки.

package sample;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;

import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;

public class Controller implements Initializable{

    private Stage stage = new Stage();

    private FXMLLoader loader = new FXMLLoader();

    private AnchorPane anchorPane = new AnchorPane();

    private Scene scene = new Scene(new AnchorPane());

    @FXML private Button startGameButton;
    @FXML private Button endGameButton;

    @FXML private Button buttonAnswer1;
    @FXML private Button buttonAnswer2;
    @FXML private Button buttonAnswer3;
    @FXML private Button buttonAnswer4;

    public void createScene(int typeOfScene) throws Exception
    {
        if (typeOfScene == 1)
        {
            loader = new FXMLLoader(getClass().getResource("/sample/sample.fxml"));
            anchorPane = loader.load();

            scene = new Scene(anchorPane);
            stage.setScene(scene);
            stage.show();
        }

        if (typeOfScene == 2)
        {
            scene = null;

            loader = new FXMLLoader(getClass().getResource("/sample/episodesFXML.fxml"));

            anchorPane = loader.load();

            scene = new Scene(anchorPane);
            stage.setScene(scene);
            stage.show();
        }
    }

    public void getPrimaryStage(Stage stage) throws Exception
    {
        this.stage = stage;
        createScene(1);
    }

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        startGameButton.setOnAction(event -> {
            try {
                createScene(2);
            } catch (Exception e)
            {
                e.printStackTrace();
            }
        });

        endGameButton.setOnAction(event -> {
            stage.close();
        });
    }
}

person Tony Chuss    schedule 25.03.2016    source источник
comment
Возможный дубликат Что такое нулевой указатель Исключение и как его исправить?   -  person hotzst    schedule 26.03.2016
comment
Действительно, это дубликат этого вопроса, если вы не можете предоставить дополнительную информацию... например. какое значение равно null... Что говорит трассировка стека?   -  person fabian    schedule 26.03.2016
comment
Поэтому, когда я нажимаю кнопку запуска игры, я вызываю функцию createScenes(2), мой компилятор злится на строку anchorPane = loader.load();, и когда я нажимаю кнопку завершения игры, ничего не происходит, но он должен закрыть мою сцену.   -  person Tony Chuss    schedule 26.03.2016


Ответы (1)


Я помню такую ​​проблему, файл fxml связан с файлом контроллера атрибутом fx:controller. Вы пытаетесь загрузить fxml в контроллер, который не обрабатывается/загружается. Создайте еще одну форму, и отображение/скрытие форм кажется более простым.

person Tokazio    schedule 25.03.2016
comment
Удалите атрибут fx:controller из файлов fxml и используйте fxmlLoader.setController(); для динамического определения контроллера. - person Tokazio; 26.03.2016