Как решить проблему «Ошибка инициализации графического устройства для: d3d, sw»

Я столкнулся со следующим RuntimeException при запуске приложения, использующего JavaFX 11+:

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 javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer.getInstance(QuantumRenderer.java:280)
    at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.init(QuantumToolkit.java:243)
    at javafx.graphics/com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:260)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:409)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363)
    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 java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1051)
Caused by: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
    at javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:94)
    at javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:124)
    at java.base/java.lang.Thread.run(Thread.java:835)
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 java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1051)
Caused by: java.lang.RuntimeException: No toolkit found
    at javafx.graphics/com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:272)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:409)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363)
    ... 5 more

рад, что вы нашли решение :) вы можете опубликовать его как ответ (на свой собственный вопрос) - это сделает его более узнаваемым для других

kleopatra 08.04.2019 12:16
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
7
1
24 634
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ответ принят как подходящий

После загрузки JavaFX 11+ извлеките файл, а когда файл будет извлечен, переключитесь на IntelliJ IDEA. Затем выполните следующие действия в IntelliJ IDEA.

  1. Файл
  2. Структура проекта
  3. Глобальные библиотеки
  4. Нажмите знак «+», а затем Java
  5. Перейдите в папку JavaFX 11+, которую вы только что загрузили. Перейдите в папку, а затем перейдите в «lib» и выберите все эти файлы в папке, кроме «src.zip», и нажмите «ОК» в правом нижнем углу и сохраните его как «javafx12».
  6. Теперь вы перемещаете указатель мыши под «+» и нажимаете правой кнопкой мыши на библиотеку, которую вы назвали «javafx12», теперь открывается небольшое окно с различными параметрами, но после этого вы нажимаете указатель мыши на «Добавить в модули». вы перемещаете указатель мыши на папку «src» и щелкаете правой кнопкой мыши. Теперь откройте широкое окно с различными параметрами, но вы выбираете параметр «Создать», теперь открыто широкое окно со многими различными параметрами, но вы снова выбираете «module-info.java», и теперь вы копируете этот текст:

    module YOUR-PROJECT-NAME {
    
        requires javafx.graphics;
        requires javafx.controls;
        requires javafx.media;
        requires javafx.base;
        requires javafx.web;
        requires javafx.swing;
        requires javafx.fxml;
    
        opens application;
    }
    

Это решает проблему.

Вам не нужно включать все в информацию о модуле, только те части, которые вы используете. Минимум, кажется, это база, элементы управления и графика. (Мой код использует их и fxml.) Например, если вы не используете свинг или медиа, javafx.swing и javafx.media можно опустить. Инструментарий рендеринга, часть которого не была найдена, находится в бинарном файле для Windows. Он находится в каталоге javafx-sdk/bin. Этот каталог должен быть частью java.library.path. Если вы используете модули, javafx-sdk/lib может быть частью пути к модулю. (Конечно, конкретная версия является частью имени каталога javafx-sdk.)

Загрузите JavaFX Windows SDK по ссылке ниже.

https://gluonhq.com/products/javafx/

и используйте параметры ниже в аргументе VM при запуске приложения FX

-p $ModuleFileDir$/lib/javafx-sdk-11.0.2/lib --add-modules javafx.controls,javafx.base,javafx.fxml,javafx.graphics,javafx.media,javafx.web --add-opens=javafx.graphics/javafx.scene=ALL-UNNAMED --add-exports javafx.base/com.sun.javafx.event=ALL-UNNAMED

Примечание: Ничего не меняйте в скачанной папке: используйте как есть. Файлы DLL важны; если файлы DLL отсутствуют, появляется указанная выше ошибка.

Ваша записка была ключевой. Я не использовал ничего, кроме --add-modules. Не открывается и не экспортируется.

Scratte 02.05.2020 09:32

Решение, которое сработало для меня, состояло в том, чтобы добавить каталог \bin JavaFX SDK в java.library.path. Это имеет тот же эффект, что и копирование файлов из папки bin по пути JAVA_HOME, но сохраняет изменение для конкретного проекта.

File -> Project Properties -> Run

-Djava.library.path = "C:\path\to\javafx-sdk-11.0.2\bin"

Я настоятельно рекомендую использовать maven для создания программы JavaFX. Подход проиллюстрирован на семинаре Intellij по JavaFX. связь Однако; есть простое решение этой проблемы. вам нужно извлечь все содержимое JavaFX SDK; затем добавьте библиотеки, не удаляя и не изменяя другие подпапки. если вы просто скопируете подпапку lib, она не будет обращаться к папкам в подпапке bin

Я столкнулся с той же проблемой. Оказывается, я скачал версию aarch64 вместо x64. https://gluonhq.com/products/javafx/

У меня была такая же проблема, по ошибке я скачал архив x86 вместо x64 для своей Windows 10. Так что теперь все работает нормально

Sorin Ciolofan 15.11.2021 18:35

Другие вопросы по теме