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

如何在不调用System.exit()的情况下终止JavaFX平台线程?,java,javafx,java-threads,Java,Javafx,Java Threads,我正在为我们的旗舰应用程序(工作中)编写一个使用JavaFX的插件工具。旗舰应用程序有一个使用Swing的Java客户端,它允许用户执行用Java编写的宏,或者安装用Java编写的插件 注意,这些宏/插件可以独立运行,并且不依赖于Java客户机,因此无需将JavaFX组件放入JFXPanel中 我们一直面临的问题是调试的便利性。我们运行使用JavaFX的宏或插件,在我们杀死它之后(使用stop()和Platform.exit()),我们必须完全重新启动旗舰应用程序Java客户端(即JVM),然后

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

注意,这些宏/插件可以独立运行,并且不依赖于Java客户机,因此无需将JavaFX组件放入JFXPanel中

我们一直面临的问题是调试的便利性。我们运行使用JavaFX的宏或插件,在我们杀死它之后(使用stop()和Platform.exit()),我们必须完全重新启动旗舰应用程序Java客户端(即JVM),然后才能重新运行JavaFX宏/插件,这要感谢整个“应用程序启动不能调用多次”错误。旗舰应用加载速度相对较快,但仍需要一两分钟才能完全加载并打开新文件(没有打开的文件,无法运行宏或插件)

因此,我看到了一些关于Application.launch()或使用的建议,但这些建议似乎都没有真正达到我的要求,因为平台线程似乎已被终止(JavaFX GUI正确关闭,线程从运行线程列表中消失)。这几乎就好像JVM有一个布尔值,当您调用Application.launch()时,它被设置为true,这样您就无法在不杀死JVM的情况下重新启动JavaFX应用程序


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

您是否能够使用Stage而不是Application来定义JavaFX宏?如果是这样,本视频将协调关闭一个主Swing应用程序,该应用程序将打开多个JavaFX窗口


我认为这是一些代码示例可以提供帮助的地方之一。还有,当你读到相关的东西时,考虑一下有一个链接供参考(这样人们就不会告诉你你已经知道的事情)。不确定我能提供什么样的代码,这将是新颖的和有启发性的。我重写了Application stop()方法,并将Platform.exit()放在其中。使用调试器单步执行代码表明,我正在按预期执行stop()方法(和Platform.exit()。我会看看是否能找到我读过的其他文章的链接。代码可能会被框起来。要点是:15行代码没有给读者留下任何解释和推测的可能。但是当你解释你的代码应该做什么的时候,我们不能100确定它在做什么。不过,你已经走上了一条很好的道路,这是一个有趣的话题。我真的认为没有简单的解决方法。JavaFX被设计为具有这样一个应用程序生命周期——在单个JVM实例中只运行JavaFX应用程序的一个实例,并且底层底层库基于该单个应用程序进行初始化和清理。一旦应用程序停止,清理代码将运行,即使您使用反射来绕过限制,也可能再也无法获得稳定状态。我想我有一个主意,为每个应用程序实例使用不同的
ModuleLayer
s,但第二次启动会引发
不满意的链接错误。因此,除非我做错了什么,否则在同一个JVM中甚至不可能(无论发生什么)多次启动JavaFX。谢谢