4

私が構築したJavaFX 2を使用したJavaデスクトップアプリケーションがあり、JARを実行しようとしました。実行に失敗したため、コマンド ラインから実行してエラーを取得しました。これが私が得たものです:

編集:いくつかのコード行が追加/削除されたため、スタックトレースを更新しました(エラーは同じです)

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.

編集: Main.java の 150 行目は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 プラグインはありますが、ランタイムがありません。私は今それを持っていますが、それは問題を修正または変更しませんでした. msvcr100.dll と mat.dll は ....netbeans\7.0\lib\javafx2-win\bin\ にあり、(ランタイムをインストールした後) C:\Program Files\Oracle\JavaFX Runtime 2.0\bin にもありました。Netbeans で実行すると、私のプログラムは適切な場所を探しているようです。


このプログラムを実行したのはこれが初めてではありません。過去の試行では成功しました。Netbeans を実行してもエラーは発生せず、プログラムは適切に実行されます。

これはFXのバグでしょうか?プログラムが正しい場所に表示されるようにするにはどうすればよいですか? また、そうでないのはなぜですか?

4

4 に答える 4

1

さらに調査した結果、*....netbeans\7.0\lib\javafx2-win* にある bin フォルダーと、(ランタイムをインストールした後) *C:\Program Files\Oracle\JavaFX Runtime 2.0 にある bin フォルダーをコピーすることにしました。 * 私の JAR がある場所へ。

これはうまくいきました!JavaFX には bin フォルダー内の DLL が必要だと思います。それらが自動的に含まれない理由がわかりません。

于 2011-08-01T13:20:58.227 に答える
1

私は同じ問題を抱えていましたが、これが私がそれを解決した方法です。Windowsでは、次の行でバッチファイルを作成しました

call c:\bkn-batfiles\setclasspath.bat 
set
java -jar  E:\DATA\JAVACLASSES-NETBEANS\search_files_with_java_fx\dist\search_files.jar 
pause 

それはうまくいきます。setcalsspath.bat で、次のように PATH を設定します

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;
于 2012-02-19T19:24:45.477 に答える
0

PATH必要な JNI ライブラリを指すように設定されていないと思います。

次の指示に従います。

  1. 表示された内容を入力echo %PATH%して報告してください。
  2. 同じコマンド プロンプトで、次のように入力します。set PATH=%PATH%;C:\Users\user\Desktop\bin
  3. 同じコマンド プロンプトで、元のコマンドを繰り返します。java -jar DesktopApp.jar
于 2011-07-26T17:49:22.667 に答える
-2

私が間違っていなければ、それは Microsoft Visual C ランタイムに関連しています。Microsoft Visual C++ 2010 再頒布可能パッケージ (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;
    }

于 2011-07-26T18:31:12.260 に答える