Как решить "Ошибка инициализации графического устройства для: d3d, sw" при запуске файла JAR java с JavaFx - PullRequest
0 голосов
/ 12 марта 2020

Добрый день всем.

У меня проблема, когда я пытаюсь запустить свой код Java в виде файла Runnable Jar. Я использую Eclipse, и я создал обычный Java проект. Я включил банки JavaFX в качестве пользовательских библиотек. Программа запускается без проблем, когда я запускаю ее с IDE. Для создания файла Jar я использую встроенный экспорт проекта Java в файле Runnable Jar. Когда я проверяю «Извлечь необходимые библиотеки в сгенерированный JAR» и запускаю его, я получаю это сообщение об ошибке:

Error: JavaFX runtime components are missing, and are required to run this application

Когда я проверяю «Пакет необходимых библиотек в сгенерированный JAR» и запускаю его, я получаю это сообщение об ошибке :

Graphics Device initialization failed for :  d3d, sw
Error initializing QuantumRenderer: no suitable pipeline found
java.lang.RuntimeException: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
        at com.sun.javafx.tk.quantum.QuantumRenderer.getInstance(QuantumRenderer.java:280)
        at com.sun.javafx.tk.quantum.QuantumToolkit.init(QuantumToolkit.java:244)
        at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:260)
        at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)
        at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
        at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
        at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:678)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
        at java.base/java.lang.Thread.run(Thread.java:835)
Caused by: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
        at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:94)
        at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:124)
        ... 1 more
Exception in thread "main" java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:567)
        at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:61)
Caused by: java.lang.RuntimeException: No toolkit found
        at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:272)
        at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)
        at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
        at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
        at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:678)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
        at java.base/java.lang.Thread.run(Thread.java:835)

Кто-нибудь знает, почему я не могу запустить JAR, но в IDE он работает нормально?

Я установил JavaFX, следуя документации здесь https://openjfx.io/openjfx-docs/ .

Ответы [ 2 ]

0 голосов
/ 16 марта 2020

Я нашел решение моей проблемы. Когда я экспортирую библиотеки в сгенерированную флягу, я получаю сообщение об ошибке, что компоненты JavaFX Runtime отсутствуют. Теперь я вспомнил, что раньше получал ту же ошибку в Eclipse, хотя ошибки в коде не было, и я использовал элементы JavaFX. Но чтобы запустить его, мне нужно было добавить аргументы VM. Поэтому мне нужно было записать это в командной строке только тогда, когда я хотел запустить программу.

Предполагая, что вы уже находитесь в каталоге вашего файла Jar сборки:

java --module-path "C:\Path\to\javafx-sdk-13.0.2\lib" --add-modules javafx.controls,javafx.fxml -jar YourJar.jar

Это работает сейчас для меня. Надеюсь, это поможет и другим.

С наилучшими пожеланиями

0 голосов
/ 12 марта 2020

Проверьте созданный вами файл манифеста jar-файла, чтобы увидеть его зависимости. Будет переменная с именем Class-path: вы можете сделать это, щелкнув правой кнопкой мыши по файлу jar и открыв его с помощью winrar или обычного проводника META.INF. Если все они начинаются с libs /, то создайте папку libs, в которой находится ваш встроенный файл jar. и скопируйте все javafx указанные файлы jar в эту папку и затем выполните

...