JavaFX 8,Java 1.8.0_31,Windows 7 x64
我在Clojure中有一个最小的JavaFX程序。 (ns...)
子句可以导入所需的Java包,但 javafx.scene.control
中的类除外,例如Button
和TextField
等。< / p>
初始化工具包后,我必须为这些导入。 为什么我不能在初始化工具包之前导入这些类?我实际上还没有创建任何对象......所以我猜测JFX在某种程度上是在做某事导入这些类时的背景,首先需要初始化。下面是我的完整lein项目(从我看到这个问题的实际应用程序中最小化,并且没有清理JFX语法的所有漂亮的宏):
档案project.clj
:
(defproject jfx-so "0.1.0-SNAPSHOT"
:dependencies [[org.clojure/clojure "1.6.0"]]
:main jfx-so.core)
档案src/jfx_so/core.clj
:
(ns jfx-so.core
(:import [javafx.scene Scene]
[javafx.scene.layout BorderPane]
[javafx.stage Stage]))
(defonce force-toolkit-init (javafx.embed.swing.JFXPanel.))
;; For some reason the following must be imported after initting the toolkit
(import [javafx.scene.control Button])
(defn -main [& args]
(javafx.application.Platform/runLater
#(doto (Stage.)
(.setScene (Scene. (BorderPane. (Button. "Hello"))))
(.show))))
谢谢! :)
答案 0 :(得分:3)
我没有遇到过这个问题。也许这与你的defonce
有关?
我先做我的进口。但是我确保在实施任何FX类之前启动FX-envoronment。所以在你的-main-method之后我会把:
(defn -main [& args]
;;body here
)
;; initialze the environement
(javafx.embed.swing.JFXPanel.)
;; ensure I can keep reloading and running without restarting JVM every time
(javafx.application.Platform/setImplicitExit false)
;; then
(-main)
希望这有帮助。