背景:我創建了一個使用JFXPanel嵌入Swing框架中的JavaFX應用程序。我一直在使用Eclipse作爲IDE。 「主應用程序」是另一個類,它只用於創建一個擴展JFXPanel
以在實例化時加載我的.fxml文件的類的實例。當從Eclipse執行主類時,一切都很好,我的.fxml文件中指定的fx:控制器調用了其方法initialize()
(我可以通過它在加載時對UI進行的更改進行分析),並且沒有任何問題。但是,當我將所有東西打包成一個JAR並嘗試將我的JFXPanel擴展類添加到一個Swing JFrame
實例時,它設法加載.fxml文件,只是精細讀取圖像,樣式表等,而其餘的該代碼正常工作,但fx:controller
的initialize()
方法從未被調用過。我沒有問題從jar內部或外部的其他類訪問類,我甚至嘗試設置一個ControllerFactory,它將返回Controller的一個實例,並嘗試各種組合設置FXMLLoader
的類加載器並使用無論是調用load()
的靜態和非靜態方法。結果總是相同的:從IDE啓動時它將起作用,但在從我的打包jar啓動時不起作用。我知道這個jar不會丟失任何文件,因爲就像我說的那樣,從Java代碼中找到該類並沒有問題,並且捆綁的fxml/css文件似乎加載正常,減去控制器問題。JavaFX 2.2在JAR文件中加載時未調用控制器initialize()
有人曾經遇到過這種情況,或者有什麼想法可能會發生什麼FXMLLoader
未能設置控制器?這可能是某種錯誤嗎?
你的jar是如何部署的?對於JavaFX 2.2,由於FXML使用反射,FXML目前無法在未簽名的webstart或applet中工作。我也相信,由於如何管理OSGI類加載(儘管我從未嘗試過),可能需要進行一些調整以使JavaFX 2.2 FXML應用程序可以在OSGI環境中工作。您的Jar應該使用JavaFX部署工具打包,否則它可能找不到正確的運行時。也許其中一件事是你的問題。 – jewelsea 2013-05-01 21:09:34