Подтвердить что ты не робот

JavaFX в Linux показывает, что "Инициализация графического устройства не удалась для: es2, sw"

Я только что начал кодировать/тестировать материал JavaFX в Linux, и я столкнулся с ошибкой, чтобы запустить простое приложение. Я нашел много людей относительно этого в Foruns, но я мог найти ясное объяснение причин, почему это происходит. Я хотел бы понять, чего не хватает в моем сценарии, чтобы заставить его работать.

Любое предложение будет действительно оценено.

Информация о Env:

java version "1.8.0-ea"
Java(TM) SE Runtime Environment (build 1.8.0-ea-b123)
Java HotSpot(TM) Client VM (build 25.0-b65, mixed mode)

Linux MYServer 2.6.21-1.3228.fc7 #1 SMP Tue Jun 12 15:37:31 EDT 2007 i686 i686 i386 GNU/Linux

Исключение:

Graphics Device initialization failed for :  es2, 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:300)
        at com.sun.javafx.tk.quantum.QuantumToolkit.init(QuantumToolkit.java:244)
        at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:179)
        at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:210)
        at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:653)
        at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:314)
        at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:305)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:483)
        at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
        at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:98)
        at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:128)
        at java.lang.Thread.run(Thread.java:744)
Exception in thread "main" java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:483)
        at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: java.lang.RuntimeException: No toolkit found
        at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:191)
        at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:210)
        at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:653)
        at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:314)
        at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:305)
4b9b3361

Ответ 1

Вам следует взглянуть на эту связанную ошибку за помощью по устранению неполадок. Таким образом, рекомендации:

  • запустите приложение с флагом -Dprism.verbose=true
  • проверить подробный журнал, который создается
  • он может указывать на отсутствующую библиотеку garphics: GTK 2.18 требуется для запуска JavaFX на linux

Ответ 2

Вам нужно установить OpenJFX:

apt-get install openjfx

а затем запустите программу.

Ответ 3

Я решаю эту проблему, добавляя в мою систему libswt-gtk-3-java и gkt3.

Ответ 4

Проблема может быть в вашей старой версии JRE, которая не содержит всех необходимых библиотек, таких как libprism_es2.so или libglass.so, которые должны быть расположены в классе /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64. To check if this is the issue compile your Main.java с консоли

javac Main.java  
java -Dprism.verbose=true Main

Вывод должен быть java.lang.UnsatisfiedLinkError: Can't load library: /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/libprism_es2.so.

Загрузите последнюю версию JRE с официального сайта Oracle и скопируйте папку lib в текущее местоположение JRE. Этого должно быть достаточно.

Ответ 5

Это было неудачно для меня, потому что у меня не было gtk libs. После включения -Dprism.verbose=true, как упоминалось в @assylias

я мог найти и установить следующие пакеты.

sudo apt-get install libgtk2.0-bin libXtst6 libxslt1.1

Исправлена ​​проблема

Ответ 6

В моем случае проблема отсутствовала в 32-разрядных зависимостях от 64-битного распределения.

Для меня следующая команда исправила проблему на Ubuntu 16.10 (x86-64):

sudo apt-get install libgtk2.0-0:i386 libxtst6:i386

Похожие вопросы:

Ответ 7

Я нашел решение, которое сработало для меня, трассировка стека имеет больше, чем эта строка:

Graphics Device initialization failed for :  es2, sw.

прокрутите вверх, и вы увидите строку, которая выглядит следующим образом:

Caused by: java.lang.RuntimeException: java.lang.UnsatisfiedLinkError: Can't load library: /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/libglass.so

Теперь загрузите новый jdk из oracle, скопируйте отсутствующий файл оттуда в папку, где этот файл отсутствует.

Мне не хватало 3 файлов, которые я скопировал, это может варьироваться от человека к человеку

Надеюсь, это поможет некоторым из вас, ребята

Ответ 8

Для тех, кто на ArchLinux: pacman -Sy java-openjfx не устанавливает необходимый gtk2 пакет (GTK3 не считается).

Ответ 9

На новой установке Ubuntu 18.10 я столкнулся с той же проблемой, когда предварительный просмотр файла уценки отображался в pycharm (версия для сообщества).

Я скачал оракул JRE (jre1.8.0_201) и использовал его вместо jre, поставляемого с pycharm, но у меня снова возникла та же проблема.

Затем добавили параметр -Dprism.verbose = true, который показал, что libgtk-x11-2.0.so.0 отсутствует. Наконец, sudo apt-get install libgtk2.0-0 решил проблему.

Спасибо пол

Ответ 10

Для тех, кто сталкивается с этой проблемой с помощью Eclipse, можно найти решение, добавив -Dprism.verbose=true в аргументы JVM в окно "Параметры отладки" (как уже упоминалось в других ответах). После этого недостающие библиотеки будут перечислены в консоли.

Однако я решил просто загрузить и установить Java с официальной страницы Oracle.

https://www.java.com/it/download/

После этого вы найдете папку Java под /usr/java/jre-1.8.X_XXX (это зависит от того, какую версию вы загрузили).

Затем откройте Eclipse и из Window- > Preferences- > Java- > Installed JREs добавьте новую JRE, используя указанный выше путь.

Теперь задайте рабочее пространство JRE на пути сборки вашего проекта.

Теперь он должен работать.

Вы также можете установить JRE только для определенного проекта, в моем случае это было более полезно как общая настройка.

Система: Fedora 26 64 бит. (Jre1.8.0_144).

Ответ 11

Помогла опция -Dprism, после чего был распечатан список файлов:

Не удается открыть общий объектный файл: файл или каталог не найдены.

  1. libgtk-x11-2.0.so.0
  2. libXxf86vm.so.1
  3. libGL.so.1

После установки пакетов все заработало.

Ответ 12

Если вы, как и первоначальный вопросник, используете Java 8, вам нужно либо установить Oracle JDK 8 (удачи), либо установить OpenJFX 8, чтобы пойти вместе с OpenJDK 8.

В настоящее время я могу предоставить точные инструкции для Ubuntu 18.x. Они также могут работать на других системах на основе Debian. Если вы используете другую ОС, возможно, имена пакетов, перечисленные ниже, приведут вас в правильном направлении.

Во-первых, вам необходимо выяснить, какие версии OpenJFX доступны в вашем дистрибутиве. Запустите это из командной строки:

$ apt-cache policy openjfx

В разделе таблицы версий вы, скорее всего, увидите два варианта. В настоящее время я вижу 11.0.2+1-1~18.04.2 и 8u161-b12-1ubuntu2. Версия, начинающаяся с 11, является стандартной, даже если вы (предположительно) установили openjdk-8-jdk. Вам понадобится версия, начинающаяся с цифры 8. На момент написания статьи это 8u161-b12-1ubuntu2.

Чтобы установить OpenJFX и связанные с ним пакеты (при условии, что вы занимаетесь разработкой), сначала убедитесь, что вы удалили все пакеты на основе Java 11, потому что они (не) успешно сосуществуют с JDK 8 и вызывают у вас множество проблем..

$ sudo apt remove openjfx openjfx-source libopenjfx-java libopenjfx-jni

Затем установите правильные версии (заменив любую версию, указанную в запросе policy на 8u161-b12-1ubuntu2):

$ sudo apt install openjfx=8u161-b12-1ubuntu2 openjfx-source=8u161-b12-1ubuntu2 libopenjfx-java=8u161-b12-1ubuntu2 libopenjfx-jni=8u161-b12-1ubuntu2

Обновление: на следующий день я заметил, что sudo apt upgrade (или автоматическое обновление системы) будет "обновлять" пакеты jfx, для которых я так тщательно выбрал версию. Вот как это предотвратить:

$ sudo apt-mark hold openjfx openjfx-source libopenjfx-java libopenjfx-jni
openjfx set on hold.
openjfx-source set on hold.
libopenjfx-java set on hold.
libopenjfx-jni set on hold.

Вы можете в любой момент запустить sudo apt showhold, чтобы получить список пакетов, которые задерживаются.

Установив эти старые, но хорошие пакеты, я решил все проблемы. Я надеюсь, что они могут помочь вам также.

Ответ 13

Если у вас есть openjdk, попробуйте изменить на jdk. Я меняю java-8-openjdk на java-8-jdk. Это исправило мою проблему. OpenJDK, в отличие от Oracle JDK, не содержит проприетарного кода, например, компонент развертывания (Java Web Start, Plugin) полностью отсутствует в нем. Кроме того, реализация некоторых алгоритмов для JDK и OpenJDK отличается, поскольку в закрытой части используется исходный код, лицензия которого не допускает их свободное распространение.