插件作业中的多个JavaFX application.launch()

插件作业中的多个JavaFX application.launch(),java,eclipse,javafx,eclipse-plugin,Java,Eclipse,Javafx,Eclipse Plugin,我正在为Eclipse开发一个插件。我正在使用JavaFX来实现这个插件的多个功能。我在Eclipse的UI中内置了一个菜单,每个命令(即单击的每个功能)都有处理程序。例如:用户单击“启动符号表”,然后调用SymbolTableHandler 这些处理程序中的每一个都从Eclipse作业启动JavaFX应用程序,以确保UI不会变得无响应。JavaFX应用程序使用application.launch()开始 我的问题是,当用户启动两个功能时,由于只允许调用application.launch()一

我正在为Eclipse开发一个插件。我正在使用JavaFX来实现这个插件的多个功能。我在Eclipse的UI中内置了一个菜单,每个命令(即单击的每个功能)都有处理程序。例如:用户单击“启动符号表”,然后调用SymbolTableHandler

这些处理程序中的每一个都从Eclipse作业启动JavaFX应用程序,以确保UI不会变得无响应。JavaFX应用程序使用
application.launch()
开始

我的问题是,当用户启动两个功能时,由于只允许调用
application.launch()
一次的限制,会抛出一个错误

这不会是一个问题,如果所有的功能一起开始,因为我可以创建新的阶段等

那么,有没有一种方法可以模拟
应用程序。多次启动
,以便该插件的多个表/功能可以一起运行


如果有人关心代码,我已经提出了一个解决方案。

2020年10月更新

虽然这个答案中的一些信息仍然相关,但有些已经过时。有关类似问题的最新答案,请参阅:

  • 参考

在JavaFX应用程序javadoc中,launch将执行以下操作:

  • 构造指定应用程序类的实例
  • 调用init()方法
  • 调用start(javafx.stage.stage)方法
  • 等待应用程序完成,当 出现以下情况:应用程序在最后一次调用Platform.exit() 窗口已关闭,平台上的implicitExit属性为 真的
  • 调用stop()方法
  • 因此,不要调用launch(),而是自己执行上述任务(例如,创建自己的自定义启动器)

    启动器还将启动JavaFX平台,因此,如果尚未启动,则需要通过以下方式间接触发

    当然,棘手的部分是4。基本上,你不能真正做到这一点,因为你不能做到4,你不知道什么时候做5。因此,您的“应用程序”需要使用一些约束来编写(例如,它们不调用Platform.exit(),因为这样会立即关闭所有活动插件)。您可以在自定义启动程序中创建的阶段上放置一个侦听器,并转到步骤3,因此当该阶段关闭时,将调用stop()方法

    上面概述的解决方案有点老套,但对您来说可能是可行的

    见相关文件:


    谢谢,我的方法有什么标准吗?当然有一些插件必须从一个菜单创建多个FXML GUI?您的方法不是标准的,大多数应用程序只能使用标准的JavaFX启动工具,但同样,大多数应用程序不是Eclipse插件。我鼓励您直接向该领域的专家询问有关在Eclipse插件中使用JavaFX的问题。我已经为任何希望使用JavaFX的Eclipse插件提供了一个解决方案,该插件具有由不同处理程序创建的多个UI。从2020年和JavaFX 14.0.1开始,我发现这个答案允许我创建两个JavaFX窗口:。我没有使用Platform.exit();作为main()中的最后一行,因为这给我造成了一个错误。@eriksan感谢您提供有关
    Platform.startup()
    的信息,我更新了答案,以引用更为最新的信息。