6

例外が発生したときに次のコードを呼び出すアプリケーションがあります。つまり、「try/catch」の「catch」内にあります。代わりにintを入力するようにユーザーに指示する「ポップアップ」のようなウィンドウを作成するだけです。

Stage dialogStage = new Stage();
dialogStage.initModality(Modality.WINDOW_MODAL);
dialogStage.setScene(new Scene(VBoxBuilder.create().
children(new Text("Please enter an integer."), new Button("Ok.")).
alignment(Pos.CENTER).padding(new Insets(5)).build()));
dialogStage.show();

唯一の問題は、プライマリ ステージ (public void start(Stage primaryStage) のパラメーター) が閉じられても、ステージが残っていることです。

何を試しましたか?:

ダイアログステージをクラス変数として定義することで、クラス全体で表示できるようにしました。次に、次のコードを実装しました。

primaryStage.setOnCloseRequest((new EventHandler<WindowEvent>(){

        @Override
        public void handle(WindowEvent arg0) {
                            arg0.consume();
            try
            {
             dialogStage.close();

                            }
            catch(Exception ex)
            {
                System.out.print(ex.getMessage()+"\r\n");
            }

        }
    }));
}

これは、ユーザーがメイン アプリケーションを終了しようとすると dialogstage が閉じられるという点で "機能" しますが、実際には意図したとおりに動作しません。プライマリ ステージを閉じようとすると、dialogstage だけが閉じられます。

クラス全体に、1 つの try/catch にしか配置されず、決して使用されない可能性のある愚かなダイアログ ボックスについて知られたくないため、これは審美的に不快な解決策でもあります。

プライマリステージが閉じるときにダイアログステージを閉じるように指示する簡単な解決策があり、try/catch 以外に多くのコードを記述する必要がないかどうかを知りたいです。

4

1 に答える 1

12

メイン ステージのイベント OnCloseRequest で、Platform.exit( docs.oracle.com/javafx/2/api/javafx/application/Platform.html )を実行します。

于 2012-08-30T11:00:00.083 に答える