Clojure (1.6) ve JavaFX 8 ile oynuyorum ve başlangıçta bir sorunla karşılaşıyorum.Clojure, statik başlatıcılar ile JavaFX sınıflarını içe aktaramaz
(ns xxyyzz.core)
(gen-class :name "xxyyzz.core.App"
:extends javafx.application.Application
:prefix "app-")
(defn app-start [app stage]
(let [button (javafx.scene.control.Button.)]))
(defn launch []
(javafx.application.Application/launch xxyyzz.core.App (into-array String [])))
(defn -main []
(launch))
Bu alakalı görünüyor yığın izlemesi son bölümüdür: Örneğin, bu çok basittir kod başarısız
Caused by: java.lang.ExceptionInInitializerError
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:340)
at clojure.lang.RT.classForName(RT.java:2070)
at clojure.lang.Compiler$HostExpr.maybeClass(Compiler.java:969)
at clojure.lang.Compiler$HostExpr.access$400(Compiler.java:747)
at clojure.lang.Compiler$NewExpr$Parser.parse(Compiler.java:2494)
at clojure.lang.Compiler.analyzeSeq(Compiler.java:6560)
... 48 more
Caused by: java.lang.IllegalStateException: Toolkit not initialized
at com.sun.javafx.application.PlatformImpl.runLater(PlatformImpl.java:276)
at com.sun.javafx.application.PlatformImpl.runLater(PlatformImpl.java:271)
at com.sun.javafx.application.PlatformImpl.setPlatformUserAgentStylesheet(PlatformImpl.java:562)
at com.sun.javafx.application.PlatformImpl.setDefaultPlatformUserAgentStylesheet(PlatformImpl.java:524)
at javafx.scene.control.Control.<clinit>(Control.java:81)
... 55 more
ben hiç Java bilmeyen, fakat bu araştırma görünüyor Sorun Clojure ve Java sınıflarını içe aktarma biçiminde yatıyor. Doğru olarak anlarsam, içe aktarma sırasında sınıf statik başlatıcısını ve bazı JavaFX sınıflarını (benim durumumda Button
) çöker.
Sanırım iki sorum var: Bu hatayı anlamak benim için doğru mu? Ve ikincisi, bu soruna bir şekilde çözüm bulmak için bir yol var mı? İthalatı (ns) beyanında yerine işlevlerin içine çekmeyi denedim, ancak hala çalışmıyor.
Clojure düzeltmesi yoksa, bu, bazı ek Java kodlarıyla düzeltilebilir mi?
Herhangi bir ipucu ve işaretçiler kabul edilir!