繁体   English   中英

即使关闭后 Javafx 应用程序仍在后台运行

[英]Javafx application is still running in background even after closing

我在关闭 JavaFX 应用程序时遇到问题。 即使关闭后,该应用程序仍会在后台运行。 我认为实际问题是由于关闭应用程序进行确认时会弹出警报框引起的,如果警报没有弹出(在某些情况下),则应用程序正常退出。

实际上,我希望用户在关闭应用程序之前确认是否保存文件,因此我添加了一个警告框,仅当文件未手动保存(使用Ctrl+SFile->Save选项)之前才会显示关闭应用程序。 当弹出窗口出现时,如果用户选择保存文件,它会照常保存,如果它选择取消,则应用程序将继续运行。

但问题是,如果出现警告框进行确认并且用户选择保存不保存选项,则应用程序不会完全关闭(即使在完成与保存相关的所有任务后,如果用户选择保存文件) 它只隐藏舞台并继续在后台运行,但如果没有出现警告框进行确认,则应用程序将正常关闭。

这是widow.setOnCloseRequest();的代码widow.setOnCloseRequest(); 事件:-

Platform.runLater(() -> {
            window = App.getStage();
            window.setOnCloseRequest(event -> {
                if (!saveIfFileEdited()) {
                    event.consume();
                } else {
                    scheduledService.shutdown();
                    // Platform.exit(); //I have tried this also but it dosen't work.
                }
            });
        });

在这里它将调用saveIfFileEdited()方法,该方法将处理用于确认的警报弹出窗口,这是它的代码:-

private boolean saveIfFileEdited() {
    if (isEdited.get()) { // this will check if the file was edited but not saved.
        Alert fileEditedAlert = new Alert(Alert.AlertType.CONFIRMATION);
        fileEditedAlert.setTitle("Notepad");
        fileEditedAlert.setHeaderText(null);
        fileEditedAlert.setContentText("Do you want to save the changes to " + windowTitle.get() + "?");
        ButtonType save = new ButtonType("Save");
        ButtonType dontSave = new ButtonType("Don't Save");
        fileEditedAlert.getButtonTypes().setAll(save, dontSave, ButtonType.CANCEL);
        Optional<ButtonType> result = fileEditedAlert.showAndWait();

        if (result.isPresent() && result.get().equals(save)) {
            handleSaveFile(null); // this func will save the file, it may open save file dialog if the file is going to be saved for first time.
            return true;
        } else if (result.isPresent() && result.get().equals(dontSave)) {
            return true;
        } else if (result.isPresent() && result.get().equals(ButtonType.CANCEL)) {
            return false;
        } else {
            return false;
        }
    } else {
        return true;
    }
}

请帮我解决这个问题。

我无法使用System.exit(0);强行关闭 JVM System.exit(0); 因为另一个线程中可能有一些任务即使在关闭应用程序后也必须完成。

谢谢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM