Estoy intentando ejecutar una aplicación Java JAR a través de un contenedor que ejecuta Podman usando Debian 11. Descargué el JAR gratuito de Worldographer de su sitio web . Lanzo el contenedor usando los siguientes comandos.
#!/usr/bin/env bash podman run \ --rm \ -it \ --network=host \ --env=DISPLAY \ --volume="/tmp/.X11-unix:/tmp/.X11-unix" \ --volume="$(pwd):/app" \ --workdir="/app" \ docker.io/library/openjdk:17.0.1-bullseye \ /bin/bashLuego dentro del contenedor instalo los siguientes paquetes.
apt update apt install --yes libxext6 libxrender1 libxtst6 openjfxLuego ejecuto la aplicación con el siguiente comando.
java -Djavafx.verbose=true -Dprism.verbose=true -Xmx4G -Dprism.maxvram=3G -jar worldographer.jarAparece la ventana de la aplicación, pero faltan botones además del encabezado.
Recibo los siguientes errores.
root@pop-os:/app# java -Djavafx.verbose=true -Dprism.verbose=true -Xmx4G -Dprism.maxvram=3G -jar worldographer.jar 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 GraphicsPipeline.createPipeline failed for com.sun.prism.es2.ES2Pipeline java.lang.ClassNotFoundException: com.sun.prism.es2.ES2Pipeline at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Class.java:375) at com.sun.prism.GraphicsPipeline.createPipeline(GraphicsPipeline.java:218) at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:91) at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:124) at java.base/java.lang.Thread.run(Thread.java:833) *** Fallback to Prism SW pipeline Prism pipeline name = com.sun.prism.sw.SWPipeline WARNING: java.lang.UnsatisfiedLinkError: Can't load library: /app/libprism_sw.so GraphicsPipeline.createPipeline failed for com.sun.prism.sw.SWPipeline java.lang.UnsatisfiedLinkError: no prism_sw in java.library.path: /usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2429) at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:818) at java.base/java.lang.System.loadLibrary(System.java:1989) at com.sun.glass.utils.NativeLibLoader.loadLibraryInternal(NativeLibLoader.java:163) at com.sun.glass.utils.NativeLibLoader.loadLibrary(NativeLibLoader.java:53) at com.sun.prism.sw.SWPipeline.lambda$static$0(SWPipeline.java:42) at java.base/java.security.AccessController.doPrivileged(AccessController.java:318) at 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:375) at com.sun.prism.GraphicsPipeline.createPipeline(GraphicsPipeline.java:218) at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:91) at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:124) at java.base/java.lang.Thread.run(Thread.java:833) 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 com.sun.javafx.tk.quantum.QuantumRenderer.getInstance(QuantumRenderer.java:280) at com.sun.javafx.tk.quantum.QuantumToolkit.init(QuantumToolkit.java:244) at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:261) at javafx.scene.image.Image.loadImage(Image.java:1078) at javafx.scene.image.Image.initialize(Image.java:813) at javafx.scene.image.Image.<init>(Image.java:703) at com.inkwellideas.ographer.model.TerrainType.setupDefaults(TerrainType.java:111) at com.inkwellideas.ographer.model.Terrain.<clinit>(Terrain.java:16) at com.inkwellideas.ographer.ui.Worldographer.main(Worldographer.java:12960) at com.inkwellideas.ographer.ui.Launcher.main(Launcher.java:122) Caused by: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:94) at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:124) at java.base/java.lang.Thread.run(Thread.java:833) Exception in thread "main" java.lang.ExceptionInInitializerError at com.inkwellideas.ographer.ui.Worldographer.main(Worldographer.java:12960) at com.inkwellideas.ographer.ui.Launcher.main(Launcher.java:122) Caused by: java.lang.RuntimeException: No toolkit found at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:273) at javafx.scene.image.Image.loadImage(Image.java:1078) at javafx.scene.image.Image.initialize(Image.java:813) at javafx.scene.image.Image.<init>(Image.java:703) at com.inkwellideas.ographer.model.TerrainType.setupDefaults(TerrainType.java:111) at com.inkwellideas.ographer.model.Terrain.<clinit>(Terrain.java:16) ... 2 more¿Hay algo más que me estoy perdiendo? Esto también sucede cuando lo ejecuto en Flatpak Sdk y habilito la extensión OpenJDK. Entonces, hay algo que me estoy perdiendo.
--EDITAR 2021-12-13--
Encontré algunos enlaces para ejecutar algo con JavaFX . Entonces, siguiendo los siguientes pasos, puedo obtener un nuevo error.
--volume="/tmp:/tmp" al comando de ejecución de podman.
apt update apt install --yes libxext6 libxrender1 libxtst6 openjfx curl --location -O https://download2.gluonhq.com/openjfx/17.0.1/openjfx-17.0.1_linux-x64_bin-sdk.zip unzip openjfx-17.0.1_linux-x64_bin-sdk.zip export JAVA_JFX=/app/javafx-sdk-17.0.1/lib java -Djavafx.verbose=true \ -Dprism.verbose=true \ -Xmx4G \ -Dprism.maxvram=3G \ --module-path $JAVA_JFX \ --add-modules javafx.controls \ -jar worldographer.jarEl error que me sale ahora es:
(java:2472): dbind-WARNING **: 05:19:06.156: Couldn't register with accessibility bus: Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken. Gtk-Message: 05:19:06.178: Failed to load module "canberra-gtk-module" Gtk-Message: 05:19:06.179: Failed to load module "canberra-gtk-module" vsync: true vpipe: false Loaded /app/javafx-sdk-17.0.1/lib/./libjavafx_font.so from relative path Loaded /app/javafx-sdk-17.0.1/lib/./libjavafx_iio.so from relative path Loaded /app/javafx-sdk-17.0.1/lib/./libjavafx_font_freetype.so from relative path Loaded /app/javafx-sdk-17.0.1/lib/./libjavafx_font_pango.so from relative path Exception in Application start method QuantumRenderer: shutdown Exception in thread "main" java.lang.RuntimeException: Exception in Application start method at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:901) at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:196) at java.base/java.lang.Thread.run(Thread.java:833) Caused by: java.lang.IllegalAccessError: superclass access check failed: class com.sun.javafx.sg.prism.web.NGWebView (in unnamed module @0x6399870c) cannot access class com.sun.javafx.sg.prism.NGGroup (in module javafx.graphics) because module javafx.graphics does not export com.sun.javafx.sg.prism to unnamed module @0x6399870c at java.base/java.lang.ClassLoader.defineClass1(Native Method) at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1012) at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150) at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:862) at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:760) at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681) at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) at com.inkwellideas.ographer.ui.Worldographer.showLicenseDialog(Worldographer.java:574) at com.inkwellideas.ographer.ui.Worldographer.start(Worldographer.java:476) at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:847) at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:484) at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:457) at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:456) at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96) at javafx.graphics/com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method) at javafx.graphics/com.sun.glass.ui.gtk.GtkApplication.lambda$runLoop$11(GtkApplication.java:290)