0

私のアプリケーションにはログイン シーンとメイン ビュー シーンがあります。ログイン時に MainView が呼び出されると、次の例外が発生します。

java.lang.NullPointerException
    at javafx.scene.Scene.focusInitial(Scene.java:1879)
    at javafx.scene.Scene.access$3600(Scene.java:170)
    at javafx.scene.Scene$ScenePulseListener.focusCleanup(Scene.java:2181)
    at javafx.scene.Scene$ScenePulseListener.pulse(Scene.java:2221)
    at com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:363)
    at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:460)
    at com.sun.javafx.tk.quantum.QuantumToolkit$9.run(QuantumToolkit.java:329)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.access$100(WinApplication.java:29)
    at com.sun.glass.ui.win.WinApplication$3$1.run(WinApplication.java:73)
    at java.lang.Thread.run(Thread.java:722)

興味深いのは、それが常に発生するわけではなく、時々発生することです。

私のクラス:

public class TargetAppDesktop extends Application {

    @Override
    public void start(Stage primaryStage) throws IOException {

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

        LoginManager loginManager = new LoginManager(scene);
        loginManager.showLoginScreen();
        primaryStage.setResizable(false);
        primaryStage.setScene(scene);
        primaryStage.show();

        primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
            @Override
            public void handle(WindowEvent t) {
                MainViewController.deleteTempFiles();
                Platform.exit();
                System.exit(0);
            }
        });

    }

    public static void main(String[] args) {
        launch(args);
    }
}

私のログインマネージャクラス

public class LoginManager {

    private Scene scene;

    LoginManager(Scene scene) {
        this.scene = scene;
    }

    public void logout() {
        showLoginScreen();
    }

    void showLoginScreen() {
        try {
            FXMLLoader loader = new FXMLLoader(
                    getClass().getResource("Login.fxml"));
            //         scene.getStylesheets().add(this.getClass().getResource("Login.css").toExternalForm());

            scene.setRoot((Parent) loader.load());
            LoginController controller =
                    loader.<LoginController>getController();
            controller.initManager(this);
        } catch (IOException ex) {
            Logger.getLogger(LoginManager.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    void showMainViewScreen(Login loginTargetApp, Login loginGateway, Gateway gateway, File file, ArrayList<Integer> anoList) {

            try {

                FXMLLoader loader = new FXMLLoader(getClass().getResource("MainView.fxml"));

                scene.setRoot((Parent) loader.load());

                MainViewController controller = loader.<MainViewController>getController();

                controller.initSessionID(this, scene, loginTargetApp, loginGateway, gateway, file, anoList);

            } catch (Exception ex) {
                Logger.getLogger(LoginManager.class.getName()).log(Level.SEVERE, null, ex);
            }

    }

    void autheticated(Login loginTargetApp, Login loginGateway, Gateway gateway, File file, ArrayList<Integer> anoList) {
        showMainViewScreen(loginTargetApp, loginGateway, gateway, file, anoList);
    }
}
4

1 に答える 1

0

この問題は、別のスレッドでシーンを変更しようとしていたために発生していましたが、Javafx メイン スレッドで変更する必要があるため、単純な Platform.runLater で問題が解決しました。

詳細については、こちらをご覧ください。(JIRA リンク)

于 2013-06-28T16:51:35.733 に答える