it-swarm.com.ru

Сбой инициализации JavaFX, OS X, графического устройства для: es2, sw

Я пытаюсь создать проект JavaFX в IntelliJ IDEA, но каждый раз получаю ошибки.

После завершения урока https://openjfx.io/openjfx-docs/#IDE-Intellij , я получил это:

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 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

Process finished with exit code 1

После добавления -Dprism.verbose = true к параметрам VM в IntelliJ IDEA (поэтому мои параметры VM выглядят так:

--module-path /myPath/javafx-sdk-11.0.1/lib --add-modules=javafx.controls,javafx.fxml -Dprism.verbose=true

И тогда я получаю этот вывод:

Prism pipeline init order: es2 sw 
Using Double Precision Marlin Rasterizer
Using dirty region optimizations
Not using texture mask for primitives
Not forcing power of 2 sizes for textures
Using hardware CLAMP_TO_ZERO mode
Opting in for HiDPI pixel scaling
Prism pipeline name = com.Sun.prism.es2.ES2Pipeline
Loading ES2 native library ... prism_es2
GraphicsPipeline.createPipeline failed for com.Sun.prism.es2.ES2Pipeline
Java.lang.UnsatisfiedLinkError: no prism_es2 in Java.library.path: [/Users/Lisa/javafx-sdk-11.0.1/lib]
    at Java.base/Java.lang.ClassLoader.loadLibrary(ClassLoader.Java:2660)
    at Java.base/Java.lang.Runtime.loadLibrary0(Runtime.Java:829)
    at Java.base/Java.lang.System.loadLibrary(System.Java:1867)
    at javafx.graphics/com.Sun.glass.utils.NativeLibLoader.loadLibraryInternal(NativeLibLoader.Java:150)
    at javafx.graphics/com.Sun.glass.utils.NativeLibLoader.loadLibrary(NativeLibLoader.Java:52)
    at javafx.graphics/com.Sun.prism.es2.ES2Pipeline.lambda$static$0(ES2Pipeline.Java:68)
    at Java.base/Java.security.AccessController.doPrivileged(Native Method)
    at javafx.graphics/com.Sun.prism.es2.ES2Pipeline.<clinit>(ES2Pipeline.Java:50)
    at Java.base/Java.lang.Class.forName0(Native Method)
    at Java.base/Java.lang.Class.forName(Class.Java:315)
    at javafx.graphics/com.Sun.prism.GraphicsPipeline.createPipeline(GraphicsPipeline.Java:187)
    at javafx.graphics/com.Sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.Java:91)
    at javafx.graphics/com.Sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.Java:124)
    at Java.base/Java.lang.Thread.run(Thread.Java:834)
*** Fallback to Prism SW pipeline
Prism pipeline name = com.Sun.prism.sw.SWPipeline
GraphicsPipeline.createPipeline failed for com.Sun.prism.sw.SWPipeline
Java.lang.UnsatisfiedLinkError: no prism_sw in Java.library.path: [/Users/Lisa/javafx-sdk-11.0.1/lib]
    at Java.base/Java.lang.ClassLoader.loadLibrary(ClassLoader.Java:2660)
    at Java.base/Java.lang.Runtime.loadLibrary0(Runtime.Java:829)
    at Java.base/Java.lang.System.loadLibrary(System.Java:1867)
    at javafx.graphics/com.Sun.glass.utils.NativeLibLoader.loadLibraryInternal(NativeLibLoader.Java:150)
    at javafx.graphics/com.Sun.glass.utils.NativeLibLoader.loadLibrary(NativeLibLoader.Java:52)
    at javafx.graphics/com.Sun.prism.sw.SWPipeline.lambda$static$0(SWPipeline.Java:42)
    at Java.base/Java.security.AccessController.doPrivileged(Native Method)
    at javafx.graphics/com.Sun.prism.sw.SWPipeline.<clinit>(SWPipeline.Java:41)
    at Java.base/Java.lang.Class.forName0(Native Method)
    at Java.base/Java.lang.Class.forName(Class.Java:315)
    at javafx.graphics/com.Sun.prism.GraphicsPipeline.createPipeline(GraphicsPipeline.Java:187)
    at javafx.graphics/com.Sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.Java:91)
    at javafx.graphics/com.Sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.Java:124)
    at Java.base/Java.lang.Thread.run(Thread.Java:834)
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 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

Process finished with exit code 1

Что я должен сделать, чтобы мой проект работал?

3

Как упомянуто в документации Запустите HelloWorld с использованием JavaFX 11, первый шаг, который нужно начать с проекта, это

Загрузите соответствующую среду выполнения JavaFX для ваших операционная система и распакуйте его в нужное место.

Изменение ссылок на новую загруженную папку SDK для /lib для конкретной платформы решило эту проблему, пока я ранее пытался использовать папку lib, предоставленную другим пользователем.

Reason: в папке lib есть динамические библиотеки, связанные с SDK, которые мы указываем в качестве аргумента для modulepath. Эти библиотеки связаны с платформой, и, следовательно, кроссплатформенная папка SDK или lib, используемая кроссплатформенной, не сможет обеспечить динамические библиотеки, такие как упомянутые в ошибке, для загрузки во время запуска приложения.

3
nullpointer

У меня была именно эта ошибка при попытке запустить результат сборки jlink. Причиной была опечатка в --module-path. Симптом этого заключается в том, что файлы, такие как 

libprism_common.dylib, libprism_es2.dylib, libprism_sw.dylib, libjavafx_font.dylib, libjavafx_iio.dylib

(и некоторые другие) отсутствуют в папке lib/ результата сборки. 

Поэтому я рекомендую проверить, что указанный путь к модулю действительно содержит модули openjfx:

javafx.base.jmod, javafx.controls.jmod, javafx.fxml.jmod,
javafx.graphics.jmod, javafx.media.jmod, javafx.swing.jmod,
javafx.web.jmod

0
Martin Mähly