如何在不必调用 System.exit() 的情况下终止 JavaFX 平台线程?

How do I kill the JavaFX Platform thread without having to call System.exit()?

我正在为我们的旗舰应用程序(正在工作)使用 JavaFX 编写一个插件工具。旗舰应用程序有一个使用 Swing 的 Java 客户端,它允许用户执行用 Java 编写的宏,或者安装用 Java.

编写的插件

请注意,这些 macros/plugins 可以 运行 独立使用,不依赖于 Java 客户端,因此无需将 JavaFX 组件放入一个 JFXPanel。

我们一直遇到的问题之一是调试的便利性。我们 运行 使用 JavaFX 的宏或插件,在我们杀死它(使用 stop() 和 Platform.exit() )之后,我们必须完全重启旗舰应用程序 Java 客户端(即 JVM),然后我们才能重新 运行 JavaFX macro/plugin,这要归功于整个 "Application launch must not be called more than once" 错误。旗舰应用程序加载速度相对较快,但仍需要一两分钟才能完全加载并打开一个新文件(不能 运行 没有打开文件的宏或插件)。

所以我看到了 place subsequent calls to Application.launch() into a runLater call, or to use the Executor service 的一些建议,但是其中 none 似乎真正满足了我的需要,因为平台线程似乎已被终止(JavaFX GUI 正确关闭,线程从 运行ning 线程列表中消失)。这几乎就像 JVM 有一个布尔值,当您调用 Application.launch() 时它被设置为 true,这样您就无法在不终止 JVM 的情况下重新启动 JavaFX 应用程序。

我需要能够在同一个 JVM 上多次 运行 JavaFX 应用程序。那有可能吗?

您是否能够使用 Stage 而不是 Application 来定义 JavaFX 宏?如果是这样,该视频协调了一个主 Swing 应用程序的关闭,该应用程序启动了多个 JavaFX windows。

https://www.youtube.com/watch?v=1cobvRlRHic