Clojure:Java GUI问题

时间:2011-08-22 22:41:46

标签: emacs clojure slime

我这里有一小段代码。

(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永远挂断,没有框架出现,没有。

2 个答案:

答案 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。