如果 JavaFX 发生错误,如何从任何地方调用 setOnCloseRequest 来关闭应用程序?
How to call setOnCloseRequest from anywhere to close application if an error occurs in JavaFX?
如何在对话框中显示错误后关闭我的 JavaFX 应用程序?
主要内容:
primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent we) {
logger.debug("Tool is closing...");
JDBCUtil.closeConnection(); // necessary
}
});
另一个class:
// ... creating Dialog, Alert, etc.
Optional<ButtonType> result = exception.showAndWait();
if (result.get().getButtonData() == ButtonData.CANCEL_CLOSE) {
Platform.exit(); // but the handle method isn't called then...
}
虽然 setOnHiding()
事件将被处理,但当检测到应用程序级关闭时(Platform.exit()
已被调用),setOnCloseRequest()
将不会被调用。
这没有连接到舞台,所以即使你在你的 dialog
舞台中添加 setOnCloseRequest()
,它也不会被调用。
这些阶段级别的方法(例如 setOnCloseRequest
、setOnCloseRequest
)不是检测和处理应用程序级别关闭事件的正确方法。相反,您应该从应用程序实施 stop(),以检测应用程序关闭并处理所需的操作。
因此在您的主要应用程序中,
@Override
public void stop() throws Exception {
JDBCUtil.closeConnection();
super.stop();
}
如何在对话框中显示错误后关闭我的 JavaFX 应用程序?
主要内容:
primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent we) {
logger.debug("Tool is closing...");
JDBCUtil.closeConnection(); // necessary
}
});
另一个class:
// ... creating Dialog, Alert, etc.
Optional<ButtonType> result = exception.showAndWait();
if (result.get().getButtonData() == ButtonData.CANCEL_CLOSE) {
Platform.exit(); // but the handle method isn't called then...
}
虽然 setOnHiding()
事件将被处理,但当检测到应用程序级关闭时(Platform.exit()
已被调用),setOnCloseRequest()
将不会被调用。
这没有连接到舞台,所以即使你在你的 dialog
舞台中添加 setOnCloseRequest()
,它也不会被调用。
这些阶段级别的方法(例如 setOnCloseRequest
、setOnCloseRequest
)不是检测和处理应用程序级别关闭事件的正确方法。相反,您应该从应用程序实施 stop(),以检测应用程序关闭并处理所需的操作。
因此在您的主要应用程序中,
@Override
public void stop() throws Exception {
JDBCUtil.closeConnection();
super.stop();
}