2

我这里有一小段代码。

(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),从正确的类路径开始,等等,调用(使用'experiments) - 这有效 - 然后调用

(create-frame "Foo" "Bar").

然后……什么都没有。REPL 永远挂断,没有帧出现,什么也没有。

4

2 回答 2

2

首先,您应该从事件调度线程与 Swing 交谈。看看clojure.contrib.swing-utils/do-swing

于 2011-08-23T01:17:17.780 回答
0

您的代码适用于我在 Ubuntu 11.04 上使用 Sun 的 JDK 1.6.0_26 和 Clojure 1.2.1 ......但是窗口框架非常小,因为它被包装在一个小的“Bar”标签周围。你确定你没有错过它,而且这个窗口实际上就在你桌面的某个地方吗?

另外,我记得(我在这里可能错了),但我认为 ubuntu-default IcedTea JRE 存在 Swing 问题 - 如果您正在使用它,请尝试使用正确的 Sun/Oracle JRE。

于 2011-08-22T23:25:15.283 回答