JFoenix icon indicating copy to clipboard operation
JFoenix copied to clipboard

Incompatibilities between JFoenix 9.0.8 and OpenJFX 12 / OpenJDK 12 (JFXDatePicker, JFXTimePicker)

Open andre-schneider-fraunhofer opened this issue 5 years ago • 6 comments

I found two incompatibilities between JFoenix 9.0.8 and OpenJFX 12. I have trouble at least with two classes: JFXDatePicker and JFXTimePicker. Both classes use ReflectionHelper in order to access ?private? members of the super classes DatePicker and TimePicker from the javafx.scene.controls package.

I guess there are a few changes in OpenJDK 12 as well as OpenJFX 12 and now the JFoenix implementation has to be adapted.

Problem #1: JFXDatePicker line 84, NullPointerException while accessing the private "editor" field from the parent class.

Problem #2: JFXTimePicker ... see exception below ...

Exception in thread "JavaFX Application Thread" java.lang.InternalError: java.lang.IllegalAccessException: class com.jfoenix.adapters.ReflectionHelper cannot access a member of class javafx.scene.control.skin.ComboBoxPopupControl (in module javafx.controls) with modifiers ""
	at com.jfoenix.adapters.ReflectionHelper.invoke(ReflectionHelper.java:62)
	at com.jfoenix.skins.JFXGenericPickerSkin.removeParentPopupHandlers(JFXGenericPickerSkin.java:140)
	at com.jfoenix.skins.JFXGenericPickerSkin.<init>(JFXGenericPickerSkin.java:91)
	at com.jfoenix.skins.JFXTimePickerSkin.<init>(JFXTimePickerSkin.java:53)
	at com.jfoenix.controls.JFXTimePicker.createDefaultSkin(JFXTimePicker.java:92)
	at javafx.controls/javafx.scene.control.Control.doProcessCSS(Control.java:897)
	at javafx.controls/javafx.scene.control.Control$1.doProcessCSS(Control.java:89)
	at javafx.controls/com.sun.javafx.scene.control.ControlHelper.processCSSImpl(ControlHelper.java:67)
	at javafx.graphics/com.sun.javafx.scene.NodeHelper.processCSS(NodeHelper.java:145)
	at javafx.graphics/javafx.scene.Node.processCSS(Node.java:9540)
	at javafx.graphics/javafx.scene.Node.processCSS(Node.java:9533)
	at javafx.graphics/javafx.scene.Node.processCSS(Node.java:9533)
	at javafx.graphics/javafx.scene.Node.processCSS(Node.java:9533)
	at javafx.graphics/javafx.scene.Node.processCSS(Node.java:9533)
	at javafx.graphics/javafx.scene.Node.processCSS(Node.java:9533)
	at javafx.graphics/javafx.scene.Node.processCSS(Node.java:9533)
	at javafx.graphics/javafx.scene.Scene.doCSSPass(Scene.java:569)
	at javafx.graphics/javafx.scene.Scene$ScenePulseListener.pulse(Scene.java:2477)
	at javafx.graphics/com.sun.javafx.tk.Toolkit.lambda$runPulse$2(Toolkit.java:412)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:389)
	at javafx.graphics/com.sun.javafx.tk.Toolkit.runPulse(Toolkit.java:411)
	at javafx.graphics/com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:438)
	at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:562)
	at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:542)
	at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.pulseFromQueue(QuantumToolkit.java:535)
	at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$11(QuantumToolkit.java:341)
	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:835)
Caused by: java.lang.IllegalAccessException: class com.jfoenix.adapters.ReflectionHelper cannot access a member of class javafx.scene.control.skin.ComboBoxPopupControl (in module javafx.controls) with modifiers ""
	at java.base/jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.java:355)
	at java.base/java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:639)
	at java.base/java.lang.reflect.Method.invoke(Method.java:559)
	at com.jfoenix.adapters.ReflectionHelper.invoke(ReflectionHelper.java:60)
	... 29 more

Are there any ideas how I can solve the problems or are there any work-arounds?

Thanks, André

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

stale[bot] avatar Nov 18 '19 08:11 stale[bot]

This issue is still present, I think.

tobiasdiez avatar Nov 25 '19 11:11 tobiasdiez

Still exists

1-alex98 avatar May 03 '20 21:05 1-alex98

the same for java 15

littleboyonearth avatar Feb 08 '21 17:02 littleboyonearth

same for JFXTimePicker and java 15

Rozumek29 avatar Mar 05 '21 23:03 Rozumek29

Workaround tested on Java 15

From build.gradle:

def args = [
    "--add-exports=javafx.graphics/com.sun.javafx.scene=ALL-UNNAMED",
    "--add-exports=javafx.controls/com.sun.javafx.scene.control.behavior" +
        "=ALL-UNNAMED",
    "--add-exports=javafx.controls/com.sun.javafx.scene.control=ALL-UNNAMED",
    "--add-exports=javafx.controls/com.sun.javafx.scene.control.behavior" +
        "=com.jfoenix",
    "--add-exports=javafx.controls/com.sun.javafx.binding=com.jfoenix",
    "--illegal-access=warn",
    "--add-opens=javafx.controls/javafx.scene.control.skin=com.jfoenix",
    "--add-opens=java.base/java.lang.reflect=ALL-UNNAMED",
    "--add-opens=java.base/java.lang.reflect=com.jfoenix",
    "--add-exports=javafx.controls/com.sun.javafx.scene.control.behavior" +
        "=com.jfoenix",
    "--add-exports=javafx.controls/com.sun.javafx.scene.control=com.jfoenix",
    "--add-exports=javafx.base/com.sun.javafx.binding=com.jfoenix",
    "--add-exports=javafx.graphics/com.sun.javafx.stage=com.jfoenix",
    "--add-exports=javafx.base/com.sun.javafx.event=com.jfoenix"
]

application {
  mainClass = (main class)
  applicationDefaultJvmArgs = args
}

I believe someone on my team found those arguments on StackOverflow.

jlangvand avatar Apr 16 '21 11:04 jlangvand