Миграция в JDK 11 + JavaFX 11 дает исключение RuntimeException - PullRequest
0 голосов
/ 25 октября 2018

У меня есть приложение на 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

Мой 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 x64bit и JavaFX Windows SDK (последняя версия 11).Я не использую Maven (но, может быть, я должен?).

Есть идеи, чтобы это исправить?

Ответы [ 2 ]

0 голосов
/ 09 мая 2019

В Windows обновленная переменная PATH содержит javafx-sdk-11 / bin.

0 голосов
/ 26 октября 2018

Итак, некоторые библиотеки отсутствуют.

  • В 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 для пользовательского JRE, внутри [...]\jlink\bin\ .

  • В Linux отсутствующими .so из javafx-sdk-11 / lib являются по крайней мере 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 для пользовательской JRE, внутри [...]/jlink/lib.

  • На Mac отсутствующий .dylib из jav javafx-sdk-11 / lib должен быть (я полагаю!) Libprism_es2.dylib, libprism_sw.dylib, libglass.dylib, libjavafx_font.dylib [Для подтверждения].

Чтобы использовать jlink, вы должны использовать jmods - нет необходимости использовать файлы библиотеки.

И мой модуль-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;
}

Теперь он работает.

...