微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决即使关闭,Javafx应用程序仍在后台运行

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

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

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

这是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,因为即使关闭应用程序后,另一个线程中也可能需要完成一些任务。

谢谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?