Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ClassNotFound: com.sun.javafx.tk.Toolkit #1

Open
DogLooksGood opened this issue Feb 19, 2020 · 12 comments
Open

ClassNotFound: com.sun.javafx.tk.Toolkit #1

DogLooksGood opened this issue Feb 19, 2020 · 12 comments

Comments

@DogLooksGood
Copy link

DogLooksGood commented Feb 19, 2020

{:clojure.main/message
 "Syntax error (ClassNotFoundException) compiling at (vlaaad/reveal/font.clj:1:1).\ncom.sun.javafx.tk.Toolkit\n",
 :clojure.main/triage
 {:clojure.error/phase :compile-syntax-check,
  :clojure.error/line 1,
  :clojure.error/column 1,
  :clojure.error/source "font.clj",
  :clojure.error/path "vlaaad/reveal/font.clj",
  :clojure.error/class java.lang.ClassNotFoundException,
  :clojure.error/cause "com.sun.javafx.tk.Toolkit"},
 :clojure.main/trace
 {:via
  [{:type clojure.lang.Compiler$CompilerException,
    :message "Syntax error compiling at (vlaaad/reveal/font.clj:1:1).",
    :data
    {:clojure.error/phase :compile-syntax-check,
     :clojure.error/line 1,
     :clojure.error/column 1,
     :clojure.error/source "vlaaad/reveal/font.clj"},
    :at [clojure.lang.Compiler load "Compiler.java" 7648]}
   {:type java.lang.ClassNotFoundException,
    :message "com.sun.javafx.tk.Toolkit",
    :at
    [java.net.URLClassLoader findClass "URLClassLoader.java" 471]}],
  :trace
  [[java.net.URLClassLoader findClass "URLClassLoader.java" 471]
   [clojure.lang.DynamicClassLoader
    findClass
    "DynamicClassLoader.java"
    69]
   [java.lang.ClassLoader loadClass "ClassLoader.java" 588]
   [clojure.lang.DynamicClassLoader
    loadClass
    "DynamicClassLoader.java"
    77]
   [java.lang.ClassLoader loadClass "ClassLoader.java" 521]
   [java.lang.Class forName0 "Class.java" -2]
   [java.lang.Class forName "Class.java" 398]
   [clojure.lang.RT classForName "RT.java" 2211]
   [clojure.lang.RT classForNameNonLoading "RT.java" 2224]
   [vlaaad.reveal.font$eval150$loading__6721__auto____151
    invoke
    "font.clj"
    1]
   [vlaaad.reveal.font$eval150 invokeStatic "font.clj" 1]
   [vlaaad.reveal.font$eval150 invoke "font.clj" 1]
   [clojure.lang.Compiler eval "Compiler.java" 7177]
   [clojure.lang.Compiler eval "Compiler.java" 7166]
   [clojure.lang.Compiler load "Compiler.java" 7636]
   [clojure.lang.RT loadResourceScript "RT.java" 381]
   [clojure.lang.RT loadResourceScript "RT.java" 372]
   [clojure.lang.RT load "RT.java" 459]
   [clojure.lang.RT load "RT.java" 424]
   [clojure.core$load$fn__6839 invoke "core.clj" 6126]
   [clojure.core$load invokeStatic "core.clj" 6125]
   [clojure.core$load doInvoke "core.clj" 6109]
   [clojure.lang.RestFn invoke "RestFn.java" 408]
   [clojure.core$load_one invokeStatic "core.clj" 5908]
   [clojure.core$load_one invoke "core.clj" 5903]
   [clojure.core$load_lib$fn__6780 invoke "core.clj" 5948]
   [clojure.core$load_lib invokeStatic "core.clj" 5947]
   [clojure.core$load_lib doInvoke "core.clj" 5928]
   [clojure.lang.RestFn applyTo "RestFn.java" 142]
   [clojure.core$apply invokeStatic "core.clj" 667]
   [clojure.core$load_libs invokeStatic "core.clj" 5985]
   [clojure.core$load_libs doInvoke "core.clj" 5969]
   [clojure.lang.RestFn applyTo "RestFn.java" 137]
   [clojure.core$apply invokeStatic "core.clj" 667]
   [clojure.core$require invokeStatic "core.clj" 6007]
   [clojure.core$require doInvoke "core.clj" 6007]
   [clojure.lang.RestFn invoke "RestFn.java" 421]
   [vlaaad.reveal.stream$eval144$loading__6721__auto____145
    invoke
    "stream.clj"
    1]
   [vlaaad.reveal.stream$eval144 invokeStatic "stream.clj" 1]
   [vlaaad.reveal.stream$eval144 invoke "stream.clj" 1]
   [clojure.lang.Compiler eval "Compiler.java" 7177]
   [clojure.lang.Compiler eval "Compiler.java" 7166]
   [clojure.lang.Compiler load "Compiler.java" 7636]
   [clojure.lang.RT loadResourceScript "RT.java" 381]
   [clojure.lang.RT loadResourceScript "RT.java" 372]
   [clojure.lang.RT load "RT.java" 459]
   [clojure.lang.RT load "RT.java" 424]
   [clojure.core$load$fn__6839 invoke "core.clj" 6126]
   [clojure.core$load invokeStatic "core.clj" 6125]
   [clojure.core$load doInvoke "core.clj" 6109]
   [clojure.lang.RestFn invoke "RestFn.java" 408]
   [clojure.core$load_one invokeStatic "core.clj" 5908]
   [clojure.core$load_one invoke "core.clj" 5903]
   [clojure.core$load_lib$fn__6780 invoke "core.clj" 5948]
   [clojure.core$load_lib invokeStatic "core.clj" 5947]
   [clojure.core$load_lib doInvoke "core.clj" 5928]
   [clojure.lang.RestFn applyTo "RestFn.java" 142]
   [clojure.core$apply invokeStatic "core.clj" 667]
   [clojure.core$load_libs invokeStatic "core.clj" 5985]
   [clojure.core$load_libs doInvoke "core.clj" 5969]
   [clojure.lang.RestFn applyTo "RestFn.java" 137]
   [clojure.core$apply invokeStatic "core.clj" 667]
   [clojure.core$require invokeStatic "core.clj" 6007]
   [clojure.core$require doInvoke "core.clj" 6007]
   [clojure.lang.RestFn invoke "RestFn.java" 619]
   [vlaaad.reveal.prepl$eval138$loading__6721__auto____139
    invoke
    "prepl.clj"
    1]
   [vlaaad.reveal.prepl$eval138 invokeStatic "prepl.clj" 1]
   [vlaaad.reveal.prepl$eval138 invoke "prepl.clj" 1]
   [clojure.lang.Compiler eval "Compiler.java" 7177]
   [clojure.lang.Compiler eval "Compiler.java" 7166]
   [clojure.lang.Compiler load "Compiler.java" 7636]
   [clojure.lang.RT loadResourceScript "RT.java" 381]
   [clojure.lang.RT loadResourceScript "RT.java" 372]
   [clojure.lang.RT load "RT.java" 459]
   [clojure.lang.RT load "RT.java" 424]
   [clojure.core$load$fn__6839 invoke "core.clj" 6126]
   [clojure.core$load invokeStatic "core.clj" 6125]
   [clojure.core$load doInvoke "core.clj" 6109]
   [clojure.lang.RestFn invoke "RestFn.java" 408]
   [clojure.core$load_one invokeStatic "core.clj" 5908]
   [clojure.core$load_one invoke "core.clj" 5903]
   [clojure.core$load_lib$fn__6780 invoke "core.clj" 5948]
   [clojure.core$load_lib invokeStatic "core.clj" 5947]
   [clojure.core$load_lib doInvoke "core.clj" 5928]
   [clojure.lang.RestFn applyTo "RestFn.java" 142]
   [clojure.core$apply invokeStatic "core.clj" 667]
   [clojure.core$load_libs invokeStatic "core.clj" 5985]
   [clojure.core$load_libs doInvoke "core.clj" 5969]
   [clojure.lang.RestFn applyTo "RestFn.java" 137]
   [clojure.core$apply invokeStatic "core.clj" 667]
   [clojure.core$require invokeStatic "core.clj" 6007]
   [clojure.main$main_opt invokeStatic "main.clj" 514]
   [clojure.main$main_opt invoke "main.clj" 510]
   [clojure.main$main invokeStatic "main.clj" 664]
   [clojure.main$main doInvoke "main.clj" 616]
   [clojure.lang.RestFn applyTo "RestFn.java" 137]
   [clojure.lang.Var applyTo "Var.java" 705]
   [clojure.main main "main.java" 40]],
  :cause "com.sun.javafx.tk.Toolkit",
  :phase :compile-syntax-check}}

@vlaaad
Copy link
Owner

vlaaad commented Feb 19, 2020

Hi! Thanks for the report, I'll have a look.

@vlaaad
Copy link
Owner

vlaaad commented Feb 19, 2020

I can't reproduce it with various JDKs I tried, can you tell me where you obtained your JDK?

Note for self: here is a java -version you posted on reddit:

openjdk version "11.0.6" 2020-01-14
OpenJDK Runtime Environment (build 11.0.6+10)
OpenJDK 64-Bit Server VM (build 11.0.6+10, mixed mode)

@DogLooksGood
Copy link
Author

The oracle jdk 13, open jdk 13 don't work neither.
Is com.sun.javafx.tk.Toolkit built-in with jdk?

@vlaaad
Copy link
Owner

vlaaad commented Feb 20, 2020

No, it's a part of JavaFX library, which should be brought in as an artifact on java 11 and beyond. It's internal, but it has been a part of JavaFX for a long time. Could it be that you have some kind of headless JDK that can't have desktop access?

@DogLooksGood
Copy link
Author

maybe, It could be. I installed these versions through package manager in Arch Linux, even though it doesn't named as headless.

I'll post when I have more information.

@manenko
Copy link

manenko commented Jun 9, 2022

Greetings!

I have a similar (the same?) issue, even though I use a different Java version. The most important part of the error message highlighted in bold:

Exception in thread "JavaFX Application Thread" java.lang.IllegalAccessError: class vlaaad.reveal.font$fn__220 (in unnamed module @0x71527bdf) cannot access class com.sun.javafx.tk.Toolkit (in module javafx.graphics) because module javafx.graphics does not export com.sun.javafx.tk to unnamed module @0x71527bdf

at vlaaad.reveal.font$fn__220.invokeStatic(font.clj:26)

The Java I use is 18.0.1:


openjdk version "18.0.1" 2022-04-19
OpenJDK Runtime Environment Zulu18.30+11-CA (build 18.0.1+10)
OpenJDK 64-Bit Server VM Zulu18.30+11-CA (build 18.0.1+10, mixed mode, sharing)

Updated

I switched to Java 1.8 a few minutes ago:

openjdk version "1.8.0_332"
OpenJDK Runtime Environment (Zulu 8.62.0.19-CA-macosx) (build 1.8.0_332-b09)
OpenJDK 64-Bit Server VM (Zulu 8.62.0.19-CA-macosx) (build 25.332-b09, mixed mode)

Running the REPL from the command line works well:

clj -A:reveal
Clojure 1.11.1
user=> (require '[vlaaad.reveal :as r])
nil
user=> (r/tap-log)
nil
user=> (tap> (System/getProperties))
true
user=>

Running the REPL in the same way it should run from the Cursive works too:

clj -A:reveal -m vlaaad.reveal repl

However, it fails to run from Cursive. This is the configuration I have:

image

The error message I get is

Reflection warning, cljfx/jdk/fx/window.clj:9:3 - call to method setForceIntegerRenderScale on javafx.stage.Window can't be resolved (no such method).
Reflection warning, cljfx/jdk/fx/window.clj:9:3 - call to method setRenderScaleX on javafx.stage.Window can't be resolved (no such method).
Reflection warning, cljfx/jdk/fx/window.clj:9:3 - call to method setRenderScaleY on javafx.stage.Window can't be resolved (no such method).
Syntax error (IllegalArgumentException) compiling . at (cljfx/jdk/platform.clj:12:5).
No matching method startup found taking 1 args for class javafx.application.Platform

It seems something is wrong with Cursive, though I have no clue what.

@vlaaad
Copy link
Owner

vlaaad commented Jun 10, 2022

@manenko After switching the jdk from 11+ to 1.8 or back you need to clear clj cache — either by running it with -Sforce or by removing .cpcache directory.

@manenko
Copy link

manenko commented Jun 10, 2022

@manenko After switching the jdk from 11+ to 1.8 or back you need to clear clj cache — either by running it with -Sforce or by removing .cpcache directory.

I deleted the .cpcache but the problem with Cursive is still there. Anyway, It does not seem to be a problem with the REPL. It is either of asdf, Java installation or Cursive. I'll keep trying :-)

The REPL is great, by the way. I was looking for a more comprehensive replacement for clojure.inspector. One of the requirements is that the alternative must be capable of working with the remote REPLs and reveal seems to be exactly what I need. I just have to figure out how to make it work with my company's setup :-)

@lycheese
Copy link

Having the same problem with JDK17 but not with 11.

Tested with clj -Sforce -Sdeps '{:deps {vlaaad/reveal {:mvn/version "1.3.273"}}}' -X vlaaad.reveal/repl outside of a clojure project.

Error on JDK17 with JavaFX17
Exception in thread "JavaFX Application Thread" java.lang.IllegalAccessError: class vlaaad.reveal.font$fn__280 (in unnamed module @0x48c59476) cannot access class com.sun.javafx.tk.Toolkit (in module javafx.graphics) because module javafx.graphics does not export com.sun.javafx.tk to unnamed module @0x48c59476
	at vlaaad.reveal.font$fn__280.invokeStatic(font.clj:26)
	at vlaaad.reveal.font$fn__280.invoke(font.clj:26)
	at clojure.lang.Delay.deref(Delay.java:42)
	at clojure.core$deref.invokeStatic(core.clj:2337)
	at clojure.core$deref.invoke(core.clj:2323)
	at vlaaad.reveal.font$line_height.invokeStatic(font.clj:33)
	at vlaaad.reveal.font$line_height.invokePrim(font.clj)
	at vlaaad.reveal.style$fn__329.invokeStatic(style.clj:175)
	at vlaaad.reveal.style$fn__329.invoke(style.clj:33)
	at clojure.lang.Delay.deref(Delay.java:42)
	at clojure.core$deref.invokeStatic(core.clj:2337)
	at clojure.core$deref.invoke(core.clj:2323)
	at vlaaad.reveal.ui$window.invokeStatic(ui.clj:596)
	at vlaaad.reveal.ui$window.invoke(ui.clj:563)
	at clojure.lang.AFn.applyToHelper(AFn.java:154)
	at clojure.lang.AFn.applyTo(AFn.java:144)
	at clojure.lang.Var.applyTo(Var.java:705)
	at clojure.core$apply.invokeStatic(core.clj:669)
	at clojure.core$apply.invoke(core.clj:662)
	at cljfx.lifecycle$wrap_map_desc$fn__3941.invoke(lifecycle.clj:446)
	at cljfx.lifecycle$eval3651$fn__3673$G__3638__3682.invoke(lifecycle.clj:17)
	at cljfx.renderer$render_component.invokeStatic(renderer.clj:57)
	at cljfx.renderer$render_component.invoke(renderer.clj:47)
	at cljfx.renderer$create$fn__5070.invoke(renderer.clj:77)
	at cljfx.renderer$perform_render$fn__5021.invoke(renderer.clj:23)
	at cljfx.renderer$perform_render.invokeStatic(renderer.clj:22)
	at cljfx.renderer$perform_render.invoke(renderer.clj:14)
	at cljfx.renderer$request_render$fn__5047$fn__5051.invoke(renderer.clj:44)
	at cljfx.renderer$request_render$fn__5047.invoke(renderer.clj:44)
	at clojure.lang.AFn.run(AFn.java:22)
	at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:457)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
	at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:456)
	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:290)
	at java.base/java.lang.Thread.run(Thread.java:833)

Java 17 java -version:

openjdk version "17.0.3" 2022-04-19
OpenJDK Runtime Environment (build 17.0.3+7-nixos)
OpenJDK 64-Bit Server VM (build 17.0.3+7-nixos, mixed mode, sharing)

cat $JAVA_HOME/lib/javafx.properties

javafx.version=17.0.0.1-internal
javafx.runtime.version=17.0.0.1-internal+0-2022-07-13-074400
javafx.runtime.build=0

Java 11:

openjdk version "11.0.15" 2022-04-19
OpenJDK Runtime Environment (build 11.0.15+0-adhoc..source)
OpenJDK 64-Bit Server VM (build 11.0.15+0-adhoc..source, mixed mode)

cat $JAVA_HOME/lib/javafx.properties

javafx.version=11.0.3-internal
javafx.runtime.version=11.0.3-internal+0-2022-05-07-094045
javafx.runtime.build=0

Any way I can help debug this?

@vlaaad
Copy link
Owner

vlaaad commented Jul 22, 2022

@lycheese "module javafx.graphics does not export com.sun.javafx.tk to unnamed module @0x48c59476" probably means jdk 17 is more restrictive about reflective access to internal classes. You'll probably need to add something like --add-opens=???/???=ALL-UNNAMED to the jvm args. I'm not sure what exactly should be there, I'll check when I return from the vacation

@lycheese
Copy link

@lycheese "module javafx.graphics does not export com.sun.javafx.tk to unnamed module @0x48c59476" probably means jdk 17 is more restrictive about reflective access to internal classes. You'll probably need to add something like --add-opens=???/???=ALL-UNNAMED to the jvm args. I'm not sure what exactly should be there, I'll check when I return from the vacation

I think it should be -J--add-opens javafx.graphics/com.sun.javafx.tk=ALL-UNNAMED (taken form this SO question) but it complains that modules need to be specified and I have been unable to get that working so far.

@lycheese
Copy link

lycheese commented Jul 22, 2022

Changing -J--add-opens javafx.graphics/com.sun.javafx.tk=ALL-UNNAMED to -J--add-opens -Jjavafx.graphics/com.sun.javafx.tk=ALL-UNNAMED did it.


Edit:

Full working command for javafx17:

clj -J--add-opens -Jjavafx.graphics/com.sun.javafx.tk=ALL-UNNAMED -Sdeps '{:deps {vlaaad/reveal {:mvn/version "1.3.273"}}}' -X vlaaad.reveal/repl

If using :jvm-opts in deps.edn the two parts need to be two separate strings as well:

{,,,
 :jvm-opts ["--add-opens" "javafx.graphics/com.sun.javafx.tk=ALL-UNNAMED"]
 ,,,}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants