如果 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(),它也不会被调用。

这些阶段级别的方法(例如 setOnCloseRequestsetOnCloseRequest)不是检测和处理应用程序级别关闭事件的正确方法。相反,您应该从应用程序实施 stop(),以检测应用程序关闭并处理所需的操作。

因此在您的主要应用程序中,

@Override
public void stop() throws Exception {
     JDBCUtil.closeConnection(); 
     super.stop();
}