如何解决即使关闭,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 举报,一经查实,本站将立刻删除。