Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swing 为什么导入javafx.scene.control.Button失败,工具箱未初始化?_Swing_Clojure_Javafx 2_Javafx 8 - Fatal编程技术网

Swing 为什么导入javafx.scene.control.Button失败,工具箱未初始化?

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或其他小部

我正在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
或其他小部件,我会得到
工具包未初始化
错误。与尝试通过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.))