我正在使用Java FXML编写单个用户桌面应用程序。我相对较新的Java和JavaFX / FXML,但有C和C ++以及多种脚本语言的多年历史。我在处理致命异常方面遇到了一些困难,并且有一个问题。我在应用程序上提供了一些背景知识。我的具体问题在最后。
我的应用程序是数据库驱动的,有多个Java FXML屏幕,每个屏幕都有自己的控制器。有一个应用程序状态管理器,用于管理登录进程和主应用程序之间以及应用程序屏幕之间的流程。有一个屏幕管理器,可以加载所有FXML文件并初始化控制器,并处理显示屏幕。我正在使用log4j2进行日志记录,并计划将其用于任何所需的字段调试。
我理解使用Platform.exit()退出JavaFX线程以及使用System.exit()来完全关闭JVM。这些东西有效,但Platform.exit()的工作方式让我有些悲伤。
我发现Platform.exit()不会调用Main类的stop()函数,直到应用程序从我调用Platform.exit()的位置返回调用堆栈之后。我需要在调用System.exit()之前使用stop()函数,以便清理数据库相关的项目。在某些情况下,通过调用堆栈返回应用程序不是问题。在其他情况下,让代码继续运行会导致用户混淆,因此我不得不将异常一直冒泡回调用堆栈的顶部。在某些情况下,冒泡一直回到调用堆栈的顶部是混乱的,并且很难维护。我可以更多地了解为什么要求。
我的问题是,如果发生致命异常,我会调用自己的stop()方法来关闭任何打开的屏幕阶段并关闭数据库ResultSets,Statements和Connection,然后调用System.exit(),没有调用Platform.exit()?我测试了这个。它似乎在没有返回调用堆栈的情况下暂停应用程序,到目前为止还没有看到任何重大问题或内存泄漏。
谢谢。