2011-07-26 171 views
4

我有一個Java桌面應用程序與我建立的JavaFX 2,然後我試圖運行JAR。運行失敗,因此我通過命令行運行它以獲取錯誤。以下是我的了:爲什麼我的Java桌面應用程序無法運行?

編輯:我更新了堆棧跟蹤的一些代碼行已添加/刪除(此錯誤是一樣的)

C:\Users\user\Desktop>java -jar DesktopApp.jar 
Error: failed to msvcr100.dll java.lang.UnsatisfiedLinkError: Can't load library: C:\Users\user\Desktop\bin\msvcr100.dll 
*** Fallback to Prism SW pipeline 
Exception in thread "main" java.lang.ExceptionInInitializerError 
Caused by: java.lang.RuntimeException: java.lang.UnsatisfiedLinkError: Can't load library: C:\Users\user\Desktop\bin\mat.dll 
     at com.sun.javafx.tk.quantum.QuantumToolkit.startup(QuantumToolkit.java:252) 
     at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:30) 
     at javafx.embed.swing.JFXPanel.initFx(JFXPanel.java:128) 
     at javafx.embed.swing.JFXPanel.<init>(JFXPanel.java:138) 
     at app.Main.<clinit>(Main.java:150) 
Caused by: java.lang.UnsatisfiedLinkError: Can't load library: C:\Users\user\Desktop\bin\mat.dll 
     at java.lang.ClassLoader.loadLibrary(Unknown Source) 
     at java.lang.Runtime.load0(Unknown Source) 
     at java.lang.System.load(Unknown Source) 
     at com.sun.glass.utils.NativeLibLoader.loadLibraryFullPath(NativeLibLoader.java:155) 
     at com.sun.glass.utils.NativeLibLoader.loadLibraryInternal(NativeLibLoader.java:85) 
     at com.sun.glass.utils.NativeLibLoader.loadLibrary(NativeLibLoader.java:30) 
     at com.sun.glass.ui.Application$1.run(Application.java:27) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at com.sun.glass.ui.Application.loadNativeLibrary(Application.java:25) 
     at com.sun.glass.ui.win.WinApplication.<clinit>(WinApplication.java:33) 
     at com.sun.glass.ui.win.WinPlatformFactory.createApplication(WinPlatformFactory.java:20) 
     at com.sun.glass.ui.win.WinPlatformFactory.createApplication(WinPlatformFactory.java:17) 
     at com.sun.glass.ui.Application.Run(Application.java:49) 
     at com.sun.javafx.tk.quantum.QuantumToolkit.startup(QuantumToolkit.java:242) 
     ... 4 more 
Could not find the main class: app.Main. Program will exit. 

編輯:行150的Main.java public static JFXPanel javafxPanel = new JFXPanel。看來FX需要mat.dll並且它在錯誤的地方尋找它,所以它找不到它。我在Vista上運行程序(32位),但是當我在Windows 7(64位)上運行時,第一行(下面)不在那裏。

Error: failed to msvcr100.dll java.lang.UnsatisfiedLinkError: Can't load library: C:\Users\user\Desktop\bin\msvcr100.dll 

更多的研究後:

一些互聯網研究後,我發現下面類似的討論,我現在還在學習:

它看起來像msvcr100.dllmat.dll都涉及到JavaFX運行。我有JavaFX Netbeans插件,但我沒有運行時。我現在擁有它,但沒有解決或改變問題。我在.... netbeans \ 7.0 \ lib \ javafx2-win \ bin \中找到了msvcr100.dll和mat.dll,並且在C:\ Program Files \ Oracle \ JavaFX Runtime 2.0 \ bin中還安裝了該程序。看起來我的程序在與Netbeans一起運行時看起來是在正確的地方。


這不是我第一次運行這個程序。在過去的嘗試中,它是成功的。通過Netbeans運行不會產生任何錯誤,程序可以正常運行。

難道這是一個FX錯誤?我如何讓自己的計劃在正確的地方找到,爲什麼沒有?

+0

您是否有爲您的類定義的構造函數?另外,SUN的官方默認JVM是什麼? –

+0

這是Java FX嗎? –

+0

@Saher,添加構造函數'public Main(){}'沒有幫助。 JVM可以從java.com或sun.com官方獲得。錯誤來自於用於在NetBeans中成功運行的相同JVM。 – Dorothy

回答

1

甚至更​​多的研究後,我決定到位於* .... NetBeans中的bin文件夾複製\ 7.0 \ LIB \ javafx2雙贏*以及在* C(後我安裝運行時):\ PROGRAM Files \ Oracle \ JavaFX Runtime 2.0 *到我的JAR所在的位置。

這個工作!我猜想bin文件夾中的DLL是JavaFX所必需的。不知道爲什麼他們不會自動被包括在內。

0

我認爲你的PATH未設置爲指向所需的JNI庫。

按照以下說明:

  1. 請輸入echo %PATH%並報告上你所看到的。
  2. 在同一命令提示符下,鍵入set PATH=%PATH%;C:\Users\user\Desktop\bin
  3. 在同一命令提示符下,重複原來的命令:java -jar DesktopApp.jar
+0

C:\ Users \ user \ Desktop \ bin不存在,我不認爲它應該。 – Dorothy

+0

你需要添加包含丟失的dll路徑的目錄,但C:\用戶\用戶\桌面\ bin目錄是不是你要找的目錄。 – bithead61

-2

如果我沒有記錯,這是相關的Microsoft Visual C運行時。嘗試安裝Microsoft Visual C++ 2010 Redistributable Package (x86)

然而,一個更有趣的問題是,爲什麼在你的應用程序試圖利用這一點,爲什麼會找你的桌面上爲它?

編輯:嘗試添加addDllLocationToPath("C:\\WINDOWS\\system32\\msvcr100.dll");作爲第一行代碼到你的應用程序。

 

    /** 
    * Allows you to add a path to the library path during runtime 
    * @param dllLocation The path you would like to add 
    * @return True if the operation completed successfully, false otherwise 
    */ 
    public static boolean addDllLocationToPath(final String dllLocation) 
    { 
     //our return value 
     boolean retVal = false; 
     try 
     { 
      System.setProperty("java.library.path", System.getProperty("java.library.path") + ";" + dllLocation); 
      //get the sys path field 
      Field fieldSysPath = ClassLoader.class.getDeclaredField("sys_paths"); 
      fieldSysPath.setAccessible(true); 
      fieldSysPath.set(null, null); 
      retVal = true; 
     } 
     catch (Exception e) 
     { 
      System.err.println("Could not modify path"); 
     } 
     return retVal; 
    } 
 
+0

我已將我的JAR,lib文件夾和自述文件移至我的桌面。但我不知道它爲什麼在尋找一個帶有DLL的bin文件夾。我的程序沒有使用任何DLL,除非它們應該被包含在一個庫中。 – Dorothy

+0

他們可能正在被你沒有直接編碼的東西加載。您是否嘗試安裝可再發行組件包? – user489041

+0

Microsoft Visual C++ 2010 x64 Redistributable - 10.0.30319已經在我的電腦上。請記住,我的程序在使用Netbeans運行時可以成功運行。 – Dorothy

1

我有同樣的問題,但是這是我如何解決它。 在Windows中,我創建了以下行

它運行大的批處理文件。在setcalsspath.bat中設置路徑如下

SET PATH=.;C:\bkn-batfiles; 
SET PATH=%PATH%c:\Program Files\java\jdk1.7.0_03\bin; 
SET PATH=%PATH%c:\Program Files\java\jdk1.7.0_03\lib; 
SET PATH=%PATH%C:\Program Files\Oracle\JavaFX 2.0 SDK\rt\bin; 
相關問題