我这里有一小段代码。
(ns experiments
(:import (javax.swing JFrame JLabel)))
(defn create-frame [title text]
(doto (JFrame. title)
(.add (JLabel. text))
(.pack)
(.setDefaultCloseOperation JFrame/EXIT_ON_CLOSE)
(.setVisible true)))
现在我运行一个REPL(Clojure Box,基本上是emacs + slime),用正确的类路径开始,依此类推,调用(使用'实验) - 哪个有效 - 然后调用
(create-frame "Foo" "Bar")
。
然后......没什么。 REPL永远挂断,没有框架出现,没有。
答案 0 :(得分:2)
你应该从事件调度线程开始与Swing交谈。看看clojure.contrib.swing-utils/do-swing
。
答案 1 :(得分:0)
你的代码适用于我在Ubuntu 11.04上使用Sun的JDK 1.6.0_26和Clojure 1.2.1 ......然而,窗口框架非常小,因为它包含在一个小的“Bar”标签周围。你确定你没有错过它,窗口实际上是在桌面上的某个地方吗?
另外,正如我记得的那样(我可能在这里错了),但我认为ubuntu默认的IcedTea JRE存在Swing问题 - 如果你使用它,请尝试使用正确的Sun / Oracle JRE。