如果存在未保存的更改,我想阻止在用戶單擊窗口關閉控件(窗口框架中的'X')後關閉我的應用程序(類Foo
)。以下和其他地方的提示,我有Foo
實施EventHandler<WindowEvent>
。 handle()
方法查詢控制器未保存的更改,如果發現任何更改,則使用該事件。結構如下所示。儘管事件正在被消耗,但JavaFx 2.0主窗口關閉
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();
}
}
}
}
使用打印語句和調試器,我確認處理程序觸發和事件消耗。我也確認Application.stop()
方法從未被調用過。儘管如此,只要handle()
退出,窗口關閉。 (應用程序的線程仍在運行。)對於它的價值,應用程序僅僅是一個存根:場景被繪製,但沒有任何菜單項或控件功能,它不會創建其他線程等。
我錯過了什麼?
感謝您的回覆。 JavaFX版本是2.2.7-b01。我運行你的代碼,並得到一個空的階段(除了通常的最小化/最大化/關閉按鈕)。我點擊關閉按鈕,窗口關閉(但保持線程運行)。不知道它是否有所作爲,但我在Linux Mint 14 Nadia(64位)上運行。 – prubin 2013-03-18 20:16:10