2016-02-25 94 views
0

我正在開發Eclipse的插件。我正在使用JavaFX來實現此插件的多種功能。我有一個Eclipse的UI內置的菜單,每個命令都有處理程序,即每個功能都被點擊。例如:用戶點擊「開始符號表」,然後調用SymbolTableHandler。多個JavaFX application.launch()來自插件作業

這些處理程序中的每一個都從Eclipse作業啓動JavaFX應用程序,以確保UI不會無響應。 JavaFX應用程序使用application.launch()開始。

我的問題是,當用戶啓動兩個功能時,由於僅允許調用application.launch()一次的限制而引發錯誤。

這不會是一個問題,如果所有的功能開始在一起,我可以創建新的階段等等

那麼,有沒有辦法模仿application.launch多次這麼多個表/這個插件的功能,可以一起跑?

我想出了一個解決方案,如果有人關心的代碼。

回答

0

從JavaFX應用程序的javadoc,推出將做到這一點:

  1. 構建指定的應用程序類
  2. 的實例調用init()方法
  3. 調用start(javafx.stage.Stage )方法
  4. 等待應用程序完成,發生以下任一情況時發生: 發生以下任一情況:應用程序調用Platform.exit()最後一個 窗口已關閉,Platfo上的implicitExit屬性RM是 真正
  5. 調用stop()方法

所以,與其做調用啓動(),自己做上述任務(例如,創建你自己的自定義啓動器)。

的發射也將啓動JavaFX平臺,所以你需要觸發間接,如果它尚未完成,由creating a JFXPanel()

當然,棘手的部分是4.基本上,你不能這樣做,因爲你不能做4,你不知道什麼時候做5.所以你的「應用程序」將需要寫一些約束(例如,它們不會調用Platform.exit(),因爲它會立即關閉所有活動插件)。您可以將偵聽器放置在自定義啓動器中創建的舞臺上,然後傳遞到第3步,然後當該舞臺關閉時調用stop()方法。

上面列出的解決方案有點不方便,但可能適用於您。

參見相關:

+0

謝謝你,有沒有什麼標準,當涉及到我的那種方法?當然有插件必須從菜單創建多個FXML GUI? – UnholySalmon

+0

你的方法不是標準的,大多數應用程序只能使用標準的JavaFX啓動工具,但是大多數應用程序不是Eclipse插件。我鼓勵你問你關於在Eclipse插件中直接使用JavaFX到[e(fx)clipse社區](http://www.eclipse.org/efxclipse/community.html)的問題,誰是這方面的專家領域。 – jewelsea

+0

我想出了一個解決方案,爲任何人想要使用JavaFX的Eclipse插件與多個用戶界面的不同處理程序創建。 – UnholySalmon