Dri*_*mux 11 java javafx javafx-11
我在Java 8 + JavaFX上有一个要迁移到Java 11的应用程序。其基本目的是为网络上的用户提供.jar,以便他们可以使用此小应用程序。我将JavaFX用于接口,并使用sqlite-jdbc生成数据库。
我有我的module-info.java,编译似乎正常:没有错误。但是,如果我运行该应用程序,则会出现以下错误:
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:222)
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:566)
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:834)
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:566)
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
Run Code Online (Sandbox Code Playgroud)
我的module-info.java
module AutoGeneratorOpenData {
requires javafx.base;
requires javafx.controls;
requires javafx.fxml;
requires javafx.graphics;
requires sqlite.jdbc;
requires java.sql;
requires java.desktop;
exports autogeneratoropendata;
}
Run Code Online (Sandbox Code Playgroud)
我在Windows 10 x64位和JavaFX Windows SDK(最新版本11)上使用Netbeans 9 。我没有使用Maven(但也许我必须?)。
有解决的办法吗?
因此,缺少一些库。
在Windows上,javafx-sdk-11 / bin中缺少的DLL 至少是pyramid_d3d.dll,prism_sw.dll,javafx_font.dll,glass.dll;您可以将所有内容放入jdk目录C:\Program Files\Java\jdk[...]\bin(这不是最佳解决方案),也可以放入自定义JRE的jlink目录。[...]\jlink\bin\
在Linux上,javafx-sdk-11 / lib中缺少的.so 至少是libprism_es2.os,libprism_sw.so,libglass.so,libglassgtk3.so(对于旧配置,libglassgtk2.so可能也是如此),libjavafx_font.so,libjavafx_font_freetype .so,libjavafx_font_pango.so; 您可以将所有内容放到/usr/lib/jvm/java-11[...]/lib例如中(这不是最佳解决方案),也可以放到自定义JRE的jlink目录中[...]/jlink/lib。
在Mac上,jav javafx-sdk-11 / lib中缺少的.dylib 必须是(我想是!)libprism_es2.dylib,libprism_sw.dylib,libglass.dylib,libjavafx_font.dylib [确认]。
要使用jlink,您应该使用jmods-无需使用librairy文件。
而且我的module-info.java并不是很完整:
module AutoGeneratorOpenData {
requires sqlite.jdbc;
requires javafx.controls;
requires javafx.graphics;
requires java.sql;
requires java.desktop;
requires javafx.fxml;
requires javafx.base;
exports autogeneratoropendata;
exports autogeneratoropendata.controller;
exports autogeneratoropendata.model;
exports autogeneratoropendata.util;
opens autogeneratoropendata.controller;
}
Run Code Online (Sandbox Code Playgroud)
现在可以了。