保存されていない変更がある場合はFoo
、ユーザーがウィンドウの閉じるコントロール(ウィンドウフレームの「X」)をクリックした後にアプリケーション(クラス)が閉じないようにします。ここや他の場所でのヒントに従って、私はをFoo
実装しEventHandler<WindowEvent>
ました。このhandle()
メソッドは、未保存の変更をコントローラーに照会し、変更が見つかった場合は、イベントを消費します。構造は次のようになります。
public class Foo extends Application implements EventHandler<WindowEvent> {
@Override
public void start(Stage stage) throws Exception {
FXMLLoader loader = new FXMLLoader(getClass().getResource("Foo.fxml"));
Parent root = (Parent) loader.load();
controller = (FooController) loader.getController();
Scene scene = new Scene(root);
stage.setScene(scene);
stage.setOnCloseRequest(this); // handle window close requests
stage.show();
}
@Override
public void handle(WindowEvent t) {
if (t.getEventType() == WindowEvent.WINDOW_CLOSE_REQUEST) {
if (controller.isDirty()) {
t.consume();
}
}
}
}
printステートメントとデバッガーを使用して、ハンドラーが起動し、イベントが消費されることを確認しました。Application.stop()
また、メソッドが呼び出されないことも確認しました。それでも、handle()
終了するとすぐにウィンドウが閉じます。(ただし、アプリケーションのスレッドはまだ実行中です。)価値があるのは、アプリケーションは単なるスタブです。シーンは描画されますが、メニュー項目やコントロール機能はなく、追加のスレッドなどは作成されません。
私は何が欠けていますか?