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

时间:2016-02-25 23:10:57

标签: java eclipse javafx eclipse-plugin

我正在为Eclipse开发一个插件。我正在使用JavaFX来获得此插件的多个功能。我在Eclipse的UI中内置了一个菜单,其中包含每个命令的处理程序,即每个功能都被点击。例如:用户点击"开始符号表"然后调用SymbolTableHandler。

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

我的问题是,当用户启动两个功能时,由于仅允许调用application.launch()一次限制而引发错误。

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

那么有多种方法可以多次模仿application.launch,因此可以同时运行此插件的多个表/功能吗?

如果有人关心代码,我已经找到了解决方案。

1 个答案:

答案 0 :(得分:0)

从JavaFX Application javadoc开始,将执行以下操作:

  1. 构造指定Application类的实例
  2. 调用init()方法
  3. 调用start(javafx.stage.Stage)方法
  4. 等待应用程序完成,这发生在任何一个 发生以下情况:应用程序最后调用Platform.exit() 窗口已关闭,Platform上的implicitExit属性是 是的
  5. 调用stop()方法
  6. 因此,不是自己调用launch(),而是自己完成上述任务(例如创建自己的自定义启动器)。

    启动程序也将启动JavaFX平台,因此您需要creating a JFXPanel()间接触发它(如果尚未完成)。

    当然,棘手的部分是4.基本上,你不能真的这样做,因为你不能做4,你不知道该怎么做5.所以你的& #34;应用"将需要编写一些约束(例如,他们不会调用Platform.exit(),因为这会立即关闭所有活动插件)。您可以在自定义启动器中创建的舞台上放置一个侦听器并转到步骤3,然后在关闭该舞台时调用stop()方法。

    上面提到的解决方案有点笨拙,但可能对你有用。

    见相关: