Swing 为什么导入javafx.scene.control.Button失败,工具箱未初始化?
我正在Windows7上的Java8 64位(1.8.0_05-b13)上尝试使用带有Clojure的JavaFX的基本功能 在我的导入中(无论是在.clj文件中还是在REPL中),我可以Swing 为什么导入javafx.scene.control.Button失败,工具箱未初始化?,swing,clojure,javafx-2,javafx-8,Swing,Clojure,Javafx 2,Javafx 8,我正在Windows7上的Java8 64位(1.8.0_05-b13)上尝试使用带有Clojure的JavaFX的基本功能 在我的导入中(无论是在.clj文件中还是在REPL中),我可以(导入'javafx.scene.control.ButtonBuilder)(和其他构建器),但我不能(导入'javafx.scene.control.Button)或来自javax.scene.control的任何其他最终小部件 如果我尝试导入javafx.scene.control.Button或其他小部
(导入'javafx.scene.control.ButtonBuilder)
(和其他构建器),但我不能(导入'javafx.scene.control.Button)
或来自javax.scene.control的任何其他最终小部件
如果我尝试导入javafx.scene.control.Button
或其他小部件,我会得到工具包未初始化
错误。与尝试通过ButtonBuilder创建按钮相同,尽管ButtonBuilder类本身似乎工作正常,而且我似乎能够从javafx继承人权限导入其他内容
为了让它工作,我必须强制工具箱初始化,如图所示,我认为这会让我在某个地方留下一个孤立的面板,感觉有点脏:
Java7和javafxrt.jar的情况并非如此。关于这一点,我发现的唯一讨论(如此)表明,这是Swing互操作所必需的,我没有使用它
有人能解释一下为什么Java8现在需要这样做,以及为什么像Button这样的最终小部件似乎只需要这样做
这看起来像是一个神奇的解决办法。有没有真正的解决方案?JavaFX需要初始化代码来启动UI线程、处理应用程序运行模式和加载本机库 强烈建议JavaFX应用程序从扩展
JavaFX.appation.application
的类开始,该类将执行所有初始化例程
调用
JFXPanel
也会执行初始化,但这有点像黑客(除非你真的在一个应用程序中使用swing和FX)。因此,其他事情似乎都可以工作,比如打开主窗口,这基本上是一个未定义但仍然有用的行为?我以前曾使用:gen类方法从应用程序派生,但我想看看是否可以对GUI进行REPL控制。到目前为止,我可以创建小部件(在初始化之后),但是当我关闭窗口时,我无法再次启动它。这实际上是主要目标,将启动时间减少到可忽略的时间。是的,您最初的方法更正确。关于无法再次启动windows,请在另一个问题中询问更多详细信息。
(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.))