2013-01-03 52 views
2

我有一個使用JavaFX 2的Eclipse項目.FXML文件是使用Scene Builder生成的。我的目標是創建一個可運行的Jar。無論我以何種方式嘗試,在運行jar文件時,我總是收到JavAFX啓動程序錯誤「運行應用程序時出現異常」。堆棧跟蹤如下。無法從Eclipse部署JavaFX 2 jar

如果我使用JavaFX ant任務或javafxpackager實用程序,結果相同。

Exception in Application start method 
java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at com.javafx.main.Main.launchApp(Main.java:642) 
    at com.javafx.main.Main.main(Main.java:805) 
Caused by: java.lang.RuntimeException: Exception in Application start method 
    at  com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:403) 
    at com.sun.javafx.application.LauncherImpl.access$000(LauncherImpl.java:47) 
    at com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:115) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: java.lang.NullPointerException 
    at controllers.Main.start(Unknown Source) 
    at com.sun.javafx.application.LauncherImpl$5.run(LauncherImpl.java:319) 
    at com.sun.javafx.application.PlatformImpl$5.run(PlatformImpl.java:206) 
    at com.sun.javafx.application.PlatformImpl$4.run(PlatformImpl.java:173) 
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
    at com.sun.glass.ui.win.WinApplication.access$100(WinApplication.java:29) 
    at com.sun.glass.ui.win.WinApplication$3$1.run(WinApplication.java:73) 
    ... 1 more 

回答

4

問題是代碼中的相對路徑。當提到圖像或FXML文件時,我會使用相對路徑。從Eclipse直接運行時,這很好,但不能用作可運行jar。將路徑改爲絕對解決問題。

編輯:對於任何人絆倒這個錯誤和使用場景生成器來製作FXML文件,請注意我必須使用文本編輯器編輯從場景生成器生成的FXML文件以將相對路徑轉換爲絕對路徑。

+0

哇,這個錯誤信息確實是無助於確定問題的根本原因 - 在跟蹤它的好工作。你可以標記你的自我答案是正確的。 – jewelsea

+0

如果你正在製作一個罐子,你會如何使用絕對路徑?你能舉一個例子說明相對路徑是怎樣的,絕對路徑是怎樣的? – Math

1

如果你可以使用Maven,然後按照this tutorial創建可執行的JAR文件,EXE ..等

Maven插件JavaFX的:使用這個插件,這是非常非常容易 起牀快速運行並構建複雜的分發包(如可執行JAR文件,本機安裝程序和webstart 軟件包)。

+0

感謝您的建議,但將eclipse項目轉換爲Maven非常耗時。我找到了問題並將其發佈在答案中。 – alexb