Tengo una aplicación JavaFX modular con el siguiente código Java:
package webbrowser; import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.layout.StackPane; 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, 500, 500); stage.setScene(scene); stage.show(); } public static void main(String[] args) { launch(); } }Aquí está el archivo module-info.java:
module webBrowser { requires javafx.controls; requires javafx.web; exports webbrowser; }Compilo la aplicación JavaFX modular con el siguiente comando:
javac -d out --module-source-path . --module-path $JAVAFX_SDK/libs:$JAVAFX_JMODS --module webBrowserPaquete la aplicación JavaFX modular con el siguiente comando:
jpackage --type dmg --module-path $JAVAFX_JMODS:$JAVAFX_SDK/lib:out --add-modules javafx.controls,javafx.web,javafx.graphics,javafx.media --module webBrowser/webbrowser.WebBrowserLuego guardo la aplicación en mi carpeta /Aplicaciones (estoy en Mac OS) y abro la aplicación. La aplicación abre una ventana de 500x500, pero no muestra ningún gráfico y no abre un navegador web. La aplicación simplemente abre una ventana blanca en blanco de 500x500.
¿Por qué la aplicación no funciona correctamente?
Cuando ejecuto la aplicación con java (y renuncio a jpackage), la aplicación funciona bien en la JVM, abre un navegador web y abre la página web oracle.com.
java --module-path out:$JAVAFX_JMODS:$JAVAFX_SDK/lib --add-modules javafx.controls,javafx.web --module webBrowser/webbrowser.WebBrowser¿Por qué la aplicación no funciona cuando uso jpackage, instalo el dmg y ejecuto la aplicación Mac OS?
La sección de la documentación de openjfx.io sobre imágenes en tiempo de ejecución, modular de CLI , demuestra algunos de los puntos que se describen a continuación y proporciona ejemplos de los argumentos de la línea de comandos para compilar, vincular, empaquetar y ejecutar la aplicación.
Le sugiero que obtenga la demostración vinculada de openjfx funcionando en su entorno, luego intente lo mismo para su proyecto.
Algunas cuestiones a abordar:
jmods no se puede usar en tiempo de ejecución, solo en tiempo de compilación o enlace.
--add-modules no es necesario para java/javac cuando tiene un module-info.java.
--add-modules , no es necesario que enumere el paquete javafx porque puede resolverlo a partir de la información de su módulo.Su directorio lib es inconsistente, siempre use el mismo directorio (correcto):
lib y otras veces usas libs .Proporcione un controlador onError .
Al usar jpackage, solo debe tener las modificaciones de JavaFX.
En la respuesta a: