Почему мое приложение Java Desktop не запускается? - PullRequest
4 голосов
/ 26 июля 2011

У меня есть Java-приложение для настольного компьютера с JavaFX 2, которое я создал, а затем попытался запустить 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.

Редактировать: строка 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.dll и mat.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 ]

1 голос
/ 19 февраля 2012

У меня была такая же проблема, но я так решил ее. Под 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;
1 голос
/ 01 августа 2011

После еще большего исследования я решил скопировать папку bin, расположенную в * .... netbeans \ 7.0 \ lib \ javafx2-win *, а также (после установки среды выполнения) в * C: \ Program Files \ Oracle \JavaFX Runtime 2.0 * туда, где находится мой JAR.

Это сработало!Я предполагаю, что библиотеки DLL в папке bin необходимы для JavaFX.Не уверен, почему они не будут автоматически включены.

0 голосов
/ 26 июля 2011

Если я не ошибаюсь, это связано с Microsoft Visual C Runtime. Попробуйте установить 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;
    }

0 голосов
/ 26 июля 2011

Я думаю, что ваш PATH не настроен на указание необходимых библиотек JNI.

Следуйте этим инструкциям:

  1. Пожалуйста, введите echo %PATH% и сообщите о том, что вы видите.
  2. В той же командной строке введите set PATH=%PATH%;C:\Users\user\Desktop\bin
  3. В той же командной строке повторите исходную команду: java -jar DesktopApp.jar
...