2011-07-26 123 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; 
相关问题