2015-10-22 70 views
11

我正在開發使用javafx v8.0.40的桌面應用程序。我用inno 5創建了一個exe文件。當我在我的計算機上運行exe文件時,它安裝並運行時沒有任何問題。另一方面,當我嘗試在其他計算機上安裝並運行它時,在安裝結束時,彈出窗口對話框:「錯誤調用方法」,我單擊確定。另一個窗口彈出,提示「無法啓動jvm」。我搜索了整個互聯網,但我無法找到關於這個話題的很多內容。我希望我能解決這個問題。 預先感謝您。錯誤調用方法,無法啓動jvm

+0

嗨!你的問題缺乏精確性!哪個版本的javafx,哪個版本的inno,你的代碼是什麼樣的,等等!請各位看看[如何對提問](http://stackoverflow.com/help/how-to-ask)部分 – jkalden

+0

有很多關於堆棧溢出類似的問題:http://stackoverflow.com /問題/ 33004035/JavaFX的應用程序未能導發射,與本地-EXE束,http://stackoverflow.com/questions/33212291/javafx-exe-file-failed-due-to-exception-in - 主級,http://stackoverflow.com/questions/14253079/failed-to-launch-javafx-application-with-native-bundle-exe。拿你的選擇。如果這些問題都不能提供解決方案,那麼他們應該告訴您需要哪些信息來補充您的問題。 – hotzst

回答

2

這可能是因爲它缺少輸出jar中的依賴關係。所以你討厭在工件中添加庫,然後.exe生成應該沒問題。

這裏是的IntelliJ,那裏的圖書館都可以手動從「可用元素」移動到神器的例子

Intellij example

0

即使這個問題是有點老了 - 今天我面對完全一樣的問題,並找不到任何解決方案搜索那些以外的其他錯誤消息。

的問題是幾乎相同: 內置JavaFX應用程序使用Java 8(上開發PC運行良好)和包裝用的Inno 5 RAN應用上我們的一些機器的精機安裝程序(EXE) - 別人它失敗,確切的錯誤消息:

  • 「錯誤調用方法」 並單擊確定後
  • 「無法啓動JVM」。

在應用程序啓動時,fxml加載器加載第一個視圖控制器並調用其「初始化」方法。如果 - 在initialize中 - 拋出一個未被引用的異常,則應用程序崩潰並顯示這兩個窗口的錯誤消息。

希望這可以幫助像我這樣的人也在爲此付出努力。

9

我遇到了同樣的問題;以下爲我工作,並幫助我理解那些爆炸「錯誤調用方法。「和‘無法啓動JVM’對話框:

  1. 找到你.jar文件
    • 它具有相同的名稱作爲您的項目,它是在應用程序的安裝目錄下AppData\Local\{ApplicationTitle}\app快捷鍵:鍵入%APPDATA%進入探險);如果您的項目被命名爲HelloWorld的,在那裏你會發現HelloWorld.jar
  2. 導航到它在命令提示符目錄
    • 轉變 + 右鍵點擊任何空白點在資源管理器窗口,然後選擇「這裏打開命令窗口」 (這是一個奇特的招我最近才知道; alternatively you would cd到同一目錄下使用命令提示符)
  3. 通過命令行
    • java -jar "HelloWorld.jar"型運行您.jar,打輸入

Tadah!注意你的隱藏的異常(其中「錯誤調用方法」的存在,因此模糊地試圖與你通信)。 *

如果你的問題是類似mine它從項目out文件夾和安裝目錄之間的文件結構差異莖,這就是爲什麼在程序編譯在編輯器就好了,只是建立精細不存在問題直到它被構建出來,並且文件結構有點不同。

*如果您在通過命令行運行它,並沒有得到任何東西尋找可能的是initialize()方法過程中發生任何錯誤;這就是你的問題可能出現的地方。 您可以通過使用一個彈出式窗口例外對話框像a similar problem, here所示暴露在運行期間的任何異常。

0

通過J.Dürr響應(回答6月8日在'16 9:58)幫助解決我錯誤調用方法 & 無法啓動JVM問題。我使用下面的代碼來追查問題,結果發現這是一個錯誤的FXML資源路徑:

public static void main(final String[] taArgs) 
{ 
    try 
    { 
    Main.launch(taArgs); 
    } 
    catch (Exception e) 
    { 
    JOptionPane.showMessageDialog(null, e.getMessage()); 
    try 
    { 
     PrintWriter pw = new PrintWriter(new File("<somefilename.txt>")); 
     e.printStackTrace(pw); 
     pw.close(); 
    } 
    catch (IOException e1) 
    { 
     e1.printStackTrace(); 
    } 
    } 
} 
相關問題