如果有未保存的更改,我想阻止我的应用程序(类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();
}
}
}
}
使用打印语句和调试器,我确认处理程序触发并且事件被消耗。我还确认该Application.stop()
方法永远不会被调用。尽管如此,一旦handle()
退出,窗口就会关闭。(不过,应用程序的线程仍在运行。)对于它的价值,应用程序只是一个存根:绘制了场景,但没有菜单项或控件功能,它没有创建额外的线程等。
我错过了什么?