Just wanted to share that I sorted out all of my issues with this launcher, and I'm proud to present the result: jDeploy https://www.jdeploy.com You can now deploy your JavaFX apps as native bundles to your Mac, Linux, and Windows users without requiring a Mac/Windows/Linux box to produce the native bundle. You don't need to deal with codesigning/notarizing on Mac either. Install bundles are small (3mb compressed). When you publish updates, your users will get them automatically on next launch.
Please take it for a spin and let me know what you think. Happy to answer any questions. On Mon, Jan 24, 2022 at 9:48 AM Steve Hannah <st...@weblite.ca> wrote: > I just wanted to follow up with this in case someone comes across this > thread later. > > After thoroughly exploring the landscape, I found that the issue on Ubuntu > was caused by a conflict between the webkit2gtk-4.0 library (which I was > using to show a progress dialog in the case that the JRE or app needs to > download an update). Additionally it seemed to have a problem with just > the general gtk+-3.0 dependency, if GTK was initialized before JavaFX was > loaded. > I worked around the gtk+-3.0 issue by breaking the GTK stuff into a > separate process (calling itself with different args). This workaround was > not sufficient to resolve the webkit2gtk-4.0 conflict as, even if it wasn't > used at runtime, it would still conflict with JavaFX's webview - resulting > in a segfault. The only solution was to remove the webkit2gtk-4.0 > dependency entirely from my app, and do the progress dialog differently (I > ended up just using basic GTK widgets). > > Best regards > > Steve > > > > On Wed, Jan 19, 2022 at 9:40 AM Steve Hannah <st...@weblite.ca> wrote: > >> The following issue only seems to occur on Linux (Ubuntu 20.04.1), and >> only when I try to launch the JVM from a custom C launcher using JNI. It >> does not occur when launching the JVM as a separate process using the >> "java" binary. It also does not occur on MacOS when using the same C >> launcher using JNI. >> >> When I call MyApplication.launch(args). (where MyApplication extends the >> JavaFX Application class), I get the following stack trace: >> >> Jan. 19, 2022 8:54:27 A.M. com.sun.javafx.application.PlatformImpl startup >> Exception in thread "Thread-5" java.lang.IllegalStateException: This >> operation is permitted on the event thread only; currentThread = Thread-5 >> at >> com.sun.glass.ui.Application.checkEventThread(Application.java:447) >> at com.sun.glass.ui.Application.setName(Application.java:200) >> at >> com.sun.javafx.application.PlatformImpl.lambda$setApplicationName$2(PlatformImpl.java:142) >> at >> com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:457) >> at java.base/java.security.AccessController.doPrivileged(Native >> Method) >> at >> com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:456) >> at >> com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96) >> Exception in Application start method >> Exception in thread "Thread-31" Failed to show docs >> java.lang.IllegalStateException: Not on FX application thread; currentThread >> = Thread-31 >> at com.sun.javafx.tk.Toolkit.checkFxUserThread(Toolkit.java:295) >> at >> com.sun.javafx.tk.quantum.QuantumToolkit.checkFxUserThread(QuantumToolkit.java:458) >> at >> com.sun.javafx.tk.quantum.QuantumToolkit.exit(QuantumToolkit.java:828) >> at >> com.sun.javafx.application.PlatformImpl.lambda$tkExit$16(PlatformImpl.java:624) >> at >> com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:484) >> at >> com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:457) >> at java.base/java.security.AccessController.doPrivileged(Native >> Method) >> at >> com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:456) >> at >> com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96) >> java.lang.RuntimeException: Exception in Application start method >> at >> com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:901) >> at >> com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:196) >> at java.base/java.lang.Thread.run(Thread.java:829) >> Caused by: java.lang.IllegalStateException: Not on FX application thread; >> currentThread = Thread-6 >> at com.sun.javafx.tk.Toolkit.checkFxUserThread(Toolkit.java:295) >> at >> com.sun.javafx.tk.quantum.QuantumToolkit.checkFxUserThread(QuantumToolkit.java:458) >> at javafx.stage.Stage.<init>(Stage.java:254) >> at javafx.stage.Stage.<init>(Stage.java:240) >> at >> com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:845) >> at >> com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:484) >> at >> com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:457) >> at java.base/java.security.AccessController.doPrivileged(Native >> Method) >> at >> com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:456) >> at >> com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96) >> >> >> I have tried a few different versions of JavaFX (11, 11.0.2, 17.0.1), >> running on a few different JDK installs (all JDK11). Above stacktrace is >> from 17.0.1. >> >> From the C application that launches the JVM, I have tried running >> directly on the main thread, and also launching it in a fresh thread using >> pthreads - but same issue. I am running this inside an application written >> in Go but the JNI code is all in C. >> >> It appears as though JavaFX is unable to create its application thread >> for some reason. Does anyone have any suggestions on reasons why this >> would be the case? Are there some system properties that need to be there >> which would have been bootstrapped by the "java" binary, but would not when >> the JVM is launched via JNI? >> >> Any suggestions appreciated. I've been banging my head on this for a >> while now. >> >> Best regards >> >> Steve >> > > > -- > Steve Hannah > Web Lite Solutions Corp. > -- Steve Hannah Web Lite Solutions Corp.