Ver*_*ion 32 java linux javafx java-8
我刚开始在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
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
ass*_*ias 21
您应该查看此相关错误,以获取有关如何解决问题的帮助.总之,建议如下:
-Dprism.verbose=true标志运行应用程序小智 15
您需要安装OpenJFX:
apt-get install openjfx
Run Code Online (Sandbox Code Playgroud)
然后运行该程序.
小智 8
我解决了这个问题,将libswt-gtk-3-java和gkt3添加到我的系统中.
问题可能在您的旧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
Run Code Online (Sandbox Code Playgroud)
输出应该是java.lang.UnsatisfiedLinkError: Can't load library: /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/libprism_es2.so.
从官方Oracle网站下载最新的JRE,并将lib文件夹复制到您当前的JRE位置.那应该够了.
Pra*_* M 6
它对我来说失败了,因为我没有 gtk 库。-Dprism.verbose=true如@assylias所述启用后
我可以找到并安装以下软件包。
sudo apt-get install libgtk2.0-bin libXtst6 libxslt1.1
Run Code Online (Sandbox Code Playgroud)
它解决了问题
如果您像原来的提问者一样使用 Java 8,则需要安装 Oracle JDK 8(祝您好运),或者安装 OpenJFX 8 以与 OpenJDK 8 一起使用。
目前,我可以提供 Ubuntu 18.x 的确切说明。它们也可以在其他基于 Debian 的系统上工作。如果您使用的是其他操作系统,也许下面列出的软件包名称会引导您走向正确的方向。
首先,您需要了解您的发行版上可用的 OpenJFX 版本。从命令行运行:
$ apt-cache policy openjfx
Run Code Online (Sandbox Code Playgroud)
在版本表部分,您可能会看到两个选择。我目前看到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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
更新:我注意到第二天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.
Run Code Online (Sandbox Code Playgroud)
您可以sudo apt showhold随时运行以列出被阻止的包。
安装这些旧的但很好的软件包解决了我的所有问题。我希望他们也能帮助你。
| 归档时间: |
|
| 查看次数: |
36547 次 |
| 最近记录: |