cognitect-labs / REBL-distro

REBL-distro
368 stars 9 forks source link

tap> fails with JDK11/openjfx11 #20

Closed seancorfield closed 5 years ago

seancorfield commented 5 years ago

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
seancorfield commented 5 years ago

JavaFX 11.0.2 and 12 show the same broken behavior.

richhickey commented 5 years ago

Do you need the javafx-graphics module?

seancorfield commented 5 years ago

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?)

pedro-w commented 5 years ago

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

seancorfield commented 5 years ago

Just confirmed that this is not fixed with REBL 0.9.170.

vlaaad commented 5 years ago

Also confirming not fixed

stuarthalloway commented 5 years ago

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

vlaaad commented 5 years ago

verified, works fine on 0.9.172 :+1:

seancorfield commented 5 years ago

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