Login  Register

Re: Jogl and JavaFX

Posted by gouessej on Apr 05, 2020; 10:59am
URL: https://forum.jogamp.org/Jogl-and-JavaFX-tp4040468p4040514.html

It allows to go a bit further:
java --module-path $PATH_TO_FX --add-modules javafx.controls --add-exports javafx.graphics/com.sun.javafx.tk=ALL-UNNAMED -cp target/classes:jogamp-fat.jar org.jogamp.joglojfx.App

but I get the following exception:
Exception in thread "JavaFX Application Thread" com.jogamp.nativewindow.NativeWindowException: Error getting JFX-Thread
        at com.jogamp.nativewindow.javafx.JFXAccessor.getJFXThread(JFXAccessor.java:192)
        at com.jogamp.nativewindow.javafx.JFXAccessor.isJFXThreadOrHasJFXThreadStopped(JFXAccessor.java:217)
        at com.jogamp.nativewindow.javafx.JFXAccessor.runOnJFXThread(JFXAccessor.java:160)
        at com.jogamp.nativewindow.javafx.JFXAccessor.getWindowHandle(JFXAccessor.java:272)
        at com.jogamp.newt.javafx.NewtCanvasJFX.validateNative(NewtCanvasJFX.java:338)
        at com.jogamp.newt.javafx.NewtCanvasJFX.repaintAction(NewtCanvasJFX.java:174)
        at com.jogamp.newt.javafx.NewtCanvasJFX.access$200(NewtCanvasJFX.java:83)
        at com.jogamp.newt.javafx.NewtCanvasJFX$5.changed(NewtCanvasJFX.java:163)
        at com.jogamp.newt.javafx.NewtCanvasJFX$5.changed(NewtCanvasJFX.java:153)
        at javafx.base/com.sun.javafx.binding.ExpressionHelper$SingleChange.fireValueChangedEvent(ExpressionHelper.java:181)
        at javafx.base/com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:80)
        at javafx.base/javafx.beans.property.ReadOnlyObjectPropertyBase.fireValueChangedEvent(ReadOnlyObjectPropertyBase.java:74)
        at javafx.base/javafx.beans.property.ReadOnlyObjectWrapper.fireValueChangedEvent(ReadOnlyObjectWrapper.java:102)
        at javafx.graphics/javafx.scene.Node$ReadOnlyObjectWrapperManualFire.fireSuperValueChangedEvent(Node.java:1050)
        at javafx.graphics/javafx.scene.Node.invalidatedScenes(Node.java:1121)
        at javafx.graphics/javafx.scene.Node.setScenes(Node.java:1159)
        at javafx.graphics/javafx.scene.Parent$2.onChanged(Parent.java:372)
        at javafx.base/com.sun.javafx.collections.TrackableObservableList.lambda$new$0(TrackableObservableList.java:45)
        at javafx.base/com.sun.javafx.collections.ListListenerHelper$Generic.fireValueChangedEvent(ListListenerHelper.java:329)
        at javafx.base/com.sun.javafx.collections.ListListenerHelper.fireValueChangedEvent(ListListenerHelper.java:73)
        at javafx.base/javafx.collections.ObservableListBase.fireChange(ObservableListBase.java:233)
        at javafx.base/javafx.collections.ListChangeBuilder.commit(ListChangeBuilder.java:482)
        at javafx.base/javafx.collections.ListChangeBuilder.endChange(ListChangeBuilder.java:541)
        at javafx.base/javafx.collections.ObservableListBase.endChange(ObservableListBase.java:205)
        at javafx.base/javafx.collections.ModifiableObservableListBase.add(ModifiableObservableListBase.java:155)
        at java.base/java.util.AbstractList.add(AbstractList.java:111)
        at javafx.base/com.sun.javafx.collections.VetoableListDecorator.add(VetoableListDecorator.java:209)
        at org.jogamp.joglojfx.App.start(App.java:92)
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
        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:277)
        at java.base/java.lang.Thread.run(Thread.java:832)
Caused by: java.lang.IllegalAccessException: class com.jogamp.nativewindow.javafx.JFXAccessor cannot access a member of class com.sun.javafx.tk.Toolkit (in module javafx.graphics) with modifiers "protected static"
        at java.base/jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.java:376)
        at java.base/java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:647)
        at java.base/java.lang.reflect.Method.invoke(Method.java:556)
        at com.jogamp.nativewindow.javafx.JFXAccessor.getJFXThread(JFXAccessor.java:190)
        ... 36 more

We have to modify JOGL itself to make it work, maybe calling setAccessible(true) would be enough to get rid of that.
Julien Gouesse | Personal blog | Website