如果在JavaFX中发生错误,如何从任何地方调用setOnCloseRequest来关闭应用程序?

时间:2015-03-18 09:19:54

标签: java javafx-8 handler

如何在对话框中显示错误后关闭我的JavaFX应用程序?

主要:

primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {

    @Override
    public void handle(WindowEvent we) {
        logger.debug("Tool is closing...");
        JDBCUtil.closeConnection(); // necessary
    }
});

在另一堂课:

// ... 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...
}

1 个答案:

答案 0 :(得分:2)

虽然将处理setOnHiding()事件,但在检测到应用程序级别关闭时(setOnCloseRequest()已被调用),将不会调用Platform.exit()

这与舞台无关,因此即使您在setOnCloseRequest()阶段添加dialog,也不会被调用。

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

所以在您的主要应用程序中,

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