例外が発生したときに次のコードを呼び出すアプリケーションがあります。つまり、「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 以外に多くのコードを記述する必要がないかどうかを知りたいです。