web-dev-qa-db-ja.com

RuntimeExceptionを与えるJDK 11 + JavaFX 11への移行

Java 8 + JavaFXに移行したいアプリケーションを持っていますJava 11。ネットワークであり、彼らはこの小さなアプリケーションを使用できます。私は、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

私の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;
}

Netbeans 9をWindows 10 x64bitsで使用していますJavaFX Windows SDK(最後のバージョン11)。私はMavenを使用していません(しかし、おそらく必要ですか?)。

それを修正するアイデアはありますか?

9
Drimux

そのため、いくつかの行方不明の図書館があります。

  • Windowsでは、不足しているDLLからjavafx-sdk-11/binは少なくともprism_d3d.dll、prism_sw.dll、javafx_font.dll、glass.dllです。すべてをjdkディレクトリに配置できますC:\Program Files\Java\jdk[...]\binこれは最善の解決策ではありません、または[...]\jlink\bin\内のカスタムJREのjlinkディレクトリに 。

  • 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に入れることができます(これは最良の解決策ではありません、または[...]/jlink/lib内のカスタムJREのjlinkディレクトリに。

  • Macでは、jav javafx-sdk-11/-libから欠落している.dylibは(推測)libprism_es2.dylib、libprism_sw.dylib、libglass.dylib、libjavafx_font.dylib [確認するには]でなければなりません。

Jlinkを使用するには、jmodを使用する必要があります。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;
}

今では機能しています。

4
Drimux

Windowsで、javafx-sdk-11/binを含むようにPATH変数を更新しました。

3
Oly

また、Eclipse(この場合ではないことを知っています)とMavenを使用している場合、プラットフォーム固有のjavafx-graphicsライブラリ(win、mac、linux)の依存関係を追加すると、この問題が発生することに注意してくださいMavenを介してビルドします。理由は完全にはわかりません。

私は、pomのプラットフォーム依存の依存関係を削除し、最終的に実行する前に、ゴールでちょうどきれいなjavafx:runを実行しようとして、壁に頭を打ちました。

0
Chris Toh