我有一个JavaFX应用程序,当用户关闭窗口时,我想销毁所有与JavaFX相关的资源,并且只有一个托盘图标,然后用户可以重新打开该应用程序。
我有很多后台线程正在运行,当GUI关闭时它应该保持运行。我尝试使用Platform.exit()
,但它对程序的RAM使用没有影响。
实现这一目标的最佳方法是什么?我的目标是在应用程序关闭时尽可能减少程序对系统的影响,但仍然运行所有后台线程。
答案 0 :(得分:1)
一种选择是将应用程序作为单独的进程运行,当您想要创建应用程序时启动该进程,并在不再需要应用程序时退出该进程(因此完成完整的application lifecycle)。这样,您将完全确定应用程序在未使用时不会消耗任何资源,因为它不会运行。
如何完成启动以及托盘服务和应用程序之间的任何通信都取决于您。您可以研究各种机制,如果您决定采用这种方法,请在完成任务的某些方面时提出一些新的后续问题。
您可以看到的一些示例路由是ProcessBuilder,这无疑是一个非常挑剔且可怕的API或Java 9中可用的新Process API更新。如果希望最多确保有一个single instance的应用程序进程,有解决方案。如果您需要向正在运行的应用程序进程发送信号,您可以使用RMI之类的内容或在应用程序中运行基本的HTTP REST服务器并将消息发送到该服务器。
顺便说一下,多年前曾经有过一些关于构建multi-process JVMs的工作,但是Java的想法从来没有被广泛采用过。虽然大多数现代浏览器客户端(例如Chrome和Firefox)都是多进程体系结构,但链接文章可以深入了解此体系结构,它的一些潜在影响以及它用于这些应用程序的原因
在开始这样的路线之前,我建议你确保你的应用真正需要这种方法(正如评论中的用户空间所指出的那样)。