cognitect-labs / REBL-distro

REBL-distro

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

tap> fails with JDK11/openjfx11

seancorfield opened this issue · comments

Running on OpenJDK 11.0.1 (from AdoptJDK) and using the alias below in deps.edn to start REBL, type (tap> 42) into the REPL (or into REBL itself). The exception shown below is thrown and the value does not appear in the Tap pane.

This fails identically on both Windows 10 (via PowerShell clj) and macOS. REBL 0.9.149.

  :rebl-11
  {:extra-deps {org.clojure/core.async {:mvn/version "0.4.490"}
                ;; deps for file datafication (0.9.149 or later)
                org.clojure/data.csv {:mvn/version "0.1.4"}
                org.clojure/data.json {:mvn/version "0.2.3"}
                org.yaml/snakeyaml {:mvn/version "1.23"}
                com.cognitect/rebl
                ;; adjust to match your install location
                {:local/root "/Developer/REBL/latest/REBL.jar"}
                org.openjfx/javafx-fxml     {:mvn/version "11.0.1"}
                org.openjfx/javafx-controls {:mvn/version "11.0.1"}
                org.openjfx/javafx-swing    {:mvn/version "11.0.1"}
                org.openjfx/javafx-base     {:mvn/version "11.0.1"}
                org.openjfx/javafx-web      {:mvn/version "11.0.1"}}
   :main-opts ["-m" "cognitect.rebl"]}
Exception in thread "JavaFX Application Thread" java.lang.NoClassDefFoundError: com/sun/javafx/jmx/MXNodeAlgorithm
	at java.base/java.lang.Class.getDeclaredMethods0(Native Method)
	at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3167)
	at java.base/java.lang.Class.privateGetPublicMethods(Class.java:3192)
	at java.base/java.lang.Class.getMethods(Class.java:1905)
	at clojure.lang.Reflector.getMethods(Reflector.java:498)
	at clojure.lang.Reflector.invokeInstanceMethod(Reflector.java:98)
	at cognitect.rebl.ui$tap_cell_factory$reify__12252$fn__12253$fn__12254.invoke(ui.clj:357)
	at clojure.core$proxy_call_with_super.invokeStatic(core_proxy.clj:388)
	at clojure.core$proxy_call_with_super.invoke(core_proxy.clj:384)
	at cognitect.rebl.ui$tap_cell_factory$reify__12252$fn__12253.invoke(ui.clj:357)
	at cognitect.rebl.ui.proxy$javafx.scene.control.cell.TextFieldListCell$ff19274a.updateItem(Unknown Source)
	at javafx.scene.control.ListCell.updateItem(ListCell.java:487)
	at javafx.scene.control.ListCell.access$300(ListCell.java:73)
	at javafx.scene.control.ListCell$4.invalidated(ListCell.java:306)
	at javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:112)
	at javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:147)
	at javafx.scene.control.ListCell.setListView(ListCell.java:312)
	at javafx.scene.control.ListCell.updateListView(ListCell.java:502)
	at javafx.scene.control.skin.ListViewSkin.createCell(ListViewSkin.java:437)
	at javafx.scene.control.skin.ListViewSkin.lambda$new$9(ListViewSkin.java:207)
	at javafx.scene.control.skin.VirtualFlow.getCell(VirtualFlow.java:1672)
	at javafx.scene.control.skin.VirtualFlow.getCellLength(VirtualFlow.java:1801)
	at javafx.scene.control.skin.VirtualFlow.computeViewportOffset(VirtualFlow.java:2639)
	at javafx.scene.control.skin.VirtualFlow.layoutChildren(VirtualFlow.java:1245)
	at javafx.scene.Parent.layout(Parent.java:1204)
	at javafx.scene.Parent.layout(Parent.java:1211)
	at javafx.scene.Parent.layout(Parent.java:1211)
	at javafx.scene.Parent.layout(Parent.java:1211)
	at javafx.scene.Parent.layout(Parent.java:1211)
	at javafx.scene.Parent.layout(Parent.java:1211)
	at javafx.scene.Parent.layout(Parent.java:1211)
	at javafx.scene.Parent.layout(Parent.java:1211)
	at javafx.scene.Parent.layout(Parent.java:1211)
	at javafx.scene.Parent.layout(Parent.java:1211)
	at javafx.scene.Parent.layout(Parent.java:1211)
	at javafx.scene.Parent.layout(Parent.java:1211)
	at javafx.scene.Scene.doLayoutPass(Scene.java:576)
	at javafx.scene.Scene$ScenePulseListener.pulse(Scene.java:2482)
	at com.sun.javafx.tk.Toolkit.lambda$runPulse$2(Toolkit.java:412)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at com.sun.javafx.tk.Toolkit.runPulse(Toolkit.java:411)
	at com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:438)
	at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:519)
	at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:499)
	at com.sun.javafx.tk.quantum.QuantumToolkit.pulseFromQueue(QuantumToolkit.java:492)
	at com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$11(QuantumToolkit.java:320)
	at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
Caused by: java.lang.ClassNotFoundException: com.sun.javafx.jmx.MXNodeAlgorithm
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
	... 47 more

JavaFX 11.0.2 and 12 show the same broken behavior.

Do you need the javafx-graphics module?

I added both the graphics and media modules but no change.

Note that the missing class is com/sun/javafx/jmx/MXNodeAlgorithm -- is it perhaps a stray reference to the OracleJDK classes within REBL itself? (in the tap-cell-factory function?)

That file was removed here:
http://hg.openjdk.java.net/openjfx/jfx/rt/rev/69f6ef371e61
(don't know if that helps?)

Just confirmed that this is not fixed with REBL 0.9.170.

Also confirming not fixed

I just pushed 0.9.172 that should fix this. Will hold public announcement until y'all can verify.

verified, works fine on 0.9.172 👍

Yup, confirmed fixed on 0.9.172 on Windows with OpenJDK 11 and OpenJFX 11.0.1. Thank you!