如果存在未保存的更改,我想阻止在用户单击窗口关闭控件(窗口框架中的'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