【发布时间】:2014-05-04 22:58:14
【问题描述】:
我正在 Windows 7 上的 Java8 64 位 (1.8.0_05-b13) 上尝试使用带有 Clojure 的 JavaFX 的基本内容。
在我的导入中(无论是在 .clj 文件中还是在 REPL 中),我可以 (import 'javafx.scene.control.ButtonBuilder)(和其他构建器),但我不能 (import 'javafx.scene.control.Button) 或来自 javax.scene.control 的任何其他最终小部件。
如果我尝试导入 javafx.scene.control.Button 或其他小部件,我会收到 Toolkit Not Initialized 错误。与尝试通过 ButtonBuilder 创建按钮相同,即使 ButtonBuilder 类本身似乎工作正常,而且我似乎完全能够从 javafx 层次结构中导入其他内容。
为了让它工作,我必须强制工具包初始化,如此处所示,我认为这会在某处留下一个孤立面板,感觉有点脏:https://gist.github.com/zilti/6286307
(ns hello.core
(:import (javafx.event ActionEvent EventHandler)
(javafx.scene Scene SceneBuilder)
(javafx.scene.layout VBox VBoxBuilder)
;;(javafx.scene.control Button) -- MUST COMMENT THIS OUT OR FAIL
(javafx.scene.control ButtonBuilder)
(javafx.stage Stage StageBuilder)))
(defonce force-toolkit-init (javafx.embed.swing.JFXPanel.))
Java 7 和 javafxrt.jar 并非如此。我发现的关于这个的唯一讨论(在 SO 上)表明这是 Swing 互操作所必需的,我没有使用它。
有人可以解释一下为什么现在 Java8 需要这样做,以及为什么它似乎只需要像 Button 这样的最终小部件?
这看起来像是一个神奇的解决方法。有什么真正的解决方案吗?
【问题讨论】:
标签: swing clojure javafx-2 javafx-8