• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

473
Views
¿Por qué la imagen de tiempo de ejecución (ensamblada por jlink) para mi aplicación JavaFX no se inicia y no funciona correctamente?

Tengo un navegador web JavaFX simple que es un módulo. La estructura de directorios del módulo es:

 webBrowser webBrowser/module-info.java webBrowser/webbrowser webBrowser/webbrowser/WebBrowser.java

Aquí está el código para module-info.java

 module webBrowser { requires javafx.controls; requires javafx.web; exports webbrowser; }

Aquí está el código para WebBrowser.java:

 package webbrowser; import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.web.WebView; import javafx.scene.web.WebEngine; import javafx.stage.Stage; public class WebBrowser extends Application { @Override public void start(Stage stage) { WebView browser = new WebView(); WebEngine webEngine = browser.getEngine(); webEngine.load("http://www.oracle.com"); Scene scene = new Scene(browser, 1200, 900); stage.setScene(scene); stage.show(); } public static void main(String[] args) { launch(); } }

Compilo mi aplicación modular con javac:

 % javac -d out --module-source-path . --module-path $JAVAFX --module webBrowser

Puedo iniciar mi aplicación con Java y funciona bien:

 % java --module-path out:$JAVAFX/lib --module webBrowser/webbrowser.WebBrowser

El problema comienza cuando intento ensamblar mi módulo (webBrowser) y los módulos JavaFX usando jlink:

 % jlink --module-path out:$JAVAFX/lib --add-modules webBrowser,javafx.controls,javafx.web --output myjre % myjre/bin/java --list-modules java.base@17.0.1 java.datatransfer@17.0.1 java.desktop@17.0.1 java.net.http@17.0.1 java.prefs@17.0.1 java.xml@17.0.1 javafx.base javafx.controls javafx.graphics javafx.media javafx.web jdk.jsobject@17.0.1 jdk.unsupported@17.0.1 jdk.xml.dom@17.0.1 webBrowser % myjre/bin/java --module webBrowser/webbrowser.WebBrowser 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:283) at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.init(QuantumToolkit.java:254) at javafx.graphics/com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:264) at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:291) at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:163) at javafx.graphics/com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:659) at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:410) at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:364) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1071) 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:95) at javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:125) at java.base/java.lang.Thread.run(Thread.java:833) 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:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1071) Caused by: java.lang.RuntimeException: No toolkit found at javafx.graphics/com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:276) at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:291) at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:163) at javafx.graphics/com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:659) at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:410) at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:364) ... 5 more

Cuando ejecuto mi aplicación vinculada (arriba), obtengo esta RuntimeException:

 java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found

Notas sobre el montaje

Estoy usando jlink para ensamblar tres módulos: javafx.controls, javafx.web y webBrowser.

Pregunta

Mi aplicación funciona bien con Java. Se inicia y funciona correctamente cuando uso este comando:

 % java --module-path out:$JAVAFX/lib --module webBrowser/webbrowser.WebBrowser

Pero recibo un mensaje de error (Error al inicializar QuantumRenderer: no se encontró una canalización adecuada) cuando intento iniciar la imagen en tiempo de ejecución:

 % myjre/bin/java --module webBrowser/webbrowser.WebBrowser

¿Por qué aparece este mensaje de error cuando intento iniciar la imagen de tiempo de ejecución? ¿Cómo puedo hacer que mi navegador web se ensamble y se inicie correctamente?

over 3 years ago · Santiago Trujillo
1 answers
Answer question

0

Consulte este problema relacionado en el rastreador de openjfx e intente seguir los consejos y los pasos de solución de problemas que se encuentran allí.

Especialmente esta sección sobre la descarga y el uso de los archivos mod en lugar del sdk.

La razón es que está empaquetando los "mods" del SDK, que no tienen las bibliotecas nativas (en el SDK, tenemos jars y bibliotecas nativas).

Puede descargar los módulos JavaFX como jmods, incluidas las clases y las bibliotecas nativas.

Ver:

  • https://gluonhq.com/products/javafx/

y descargue los mods (en lugar del SDK).

A continuación, apunta jlink al directorio de mods.

Aparentemente, el paquete SDK es diferente a otros tipos de distribución como Maven. El paquete SDK separa las clases de Java y las bibliotecas nativas, mientras que el paquete para otras plataformas de entrega no lo hace, por lo que puede ejecutar el SDK, pero no vincularlo.

Consulte la sección de documentos de openjfx sobre cómo crear un tiempo de ejecución desde la línea de comandos. La ruta a usar en el comando jlink se da como

 --module-path $PATH_TO_FX_MODS:mods

no

 --module-path out:$JAVAFX/lib
over 3 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error