Linux上的JavaFX显示“图形设备初始化失败:es2,sw”

问题描述 投票:27回答:12

我刚开始在Linux上编写/测试JavaFX的东西,我在创建一个简单的应用程序时遇到了错误。在Foruns,我发现许多人对此有所了解,但我能找到一个明确的解释,说明它发生的原因。我想了解我的方案中缺少什么才能使其正常工作。

任何建议都将非常感激。

环境信息:

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)
java linux javafx java-8
12个回答
20
投票

您应该查看this related bug以获取有关如何解决问题的帮助。总之,建议如下:

  • 使用-Dprism.verbose=true标志运行应用程序
  • 检查生成的详细日志
  • 它可能指向缺少的Garphics库:在Linux上运行JavaFX需要GTK 2.18

0
投票

对于使用Eclipse遇到此问题的任何人,可以找到解决方案,将-Dprism.verbose=true添加到“调试选项”窗口中的JVM参数(如其他回复中已提到的)。之后,缺少的库将列在控制台中。

但是,我解决了从Oracle官方页面下载和安装Java的问题。

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

之后,您将在/usr/java/jre-1.8.X_XXX下找到Java文件夹(这取决于您下载的版本)。

然后,打开Eclipse并从Window-> Preferences-> Java-> Installed JREs使用上面提到的路径添加一个新的JRE。

现在,在项目的构建路径上设置工作区的JRE。

它现在应该工作。

您也可以仅为特定项目设置JRE,在我的情况下作为常规设置更有用。

系统:Fedora 26 64位。 (jre1.8.0_144)。


0
投票

-Dprism选项帮助打印出一个文件列表:

无法打开共享对象文件:找不到文件或目录。

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

安装包后,它确实有效。


-2
投票

如果你有openjdk,请尝试更改为jdk。我将java-8-openjdk更改为java-8-jdk。它解决了我的问题。与Oracle JDK相比,OpenJDK不包含某些专有代码,例如,部署组件(Java Web Start,Plugin)完全缺失。此外,JDK和OpenJDK的一些算法的实现是不同的,因为在封闭的部分中使用源代码,其许可证不允许其自由分发。


12
投票

您需要安装OpenJFX:

apt-get install openjfx

然后运行该程序。


8
投票

我解决了这个问题,将libswt-gtk-3-java和gkt3添加到我的系统中。


6
投票

问题可能出在您的旧JRE版本中,该版本不包含所有必需的库,例如libprism_es2.solibglass.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

从官方Oracle网站下载最新的JRE,并将lib文件夹复制到您当前的JRE位置。那应该够了。


4
投票

它失败了,因为我没有gtk libs。在启用@assylias提到的-Dprism.verbose=true之后

我可以找到并安装以下包。

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

它解决了这个问题


2
投票

就我而言,问题是缺少对64位分发的32位依赖性。

对我来说,以下命令修复了Ubuntu 16.10(x86-64)上的问题:

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

相关问题:


2
投票

我找到了一个对我有用的解决方案,堆栈跟踪比这行更多:

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

现在从oracle下载新的jdk,将丢失的文件从那里复制到缺少文件的文件夹中。

我总共丢失了3个我复制的文件,这可能因人而异

希望这有助于你们中的一些人


1
投票

对于那些在ArchLinux上的人:pacman -Sy java-openjfx没有安装必要的gtk2包(GTK3不计算在内)。


1
投票

在全新的Ubuntu 18.10安装中,当在pycharm(社区版)中呈现降价文件的预览时,我遇到了同样的问题。

我下载了一个oracle JRE(jre1.8.0_201)并使用它来代替pycharm附带的jre但我又遇到了同样的问题。

然后添加-Dprism.verbose = true选项,显示缺少libgtk-x11-2.0.so.0。最后sudo apt-get install libgtk2.0-0解决了这个问题。

谢谢,保罗

© www.soinside.com 2019 - 2024. All rights reserved.