Clojure: проблема с графическим интерфейсом Java - PullRequest
2 голосов
/ 23 августа 2011

У меня есть этот маленький кусочек кода здесь.

(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 ]

2 голосов
/ 23 августа 2011

Для начала вы должны общаться с Swing из потока рассылки событий.Посмотрите на clojure.contrib.swing-utils/do-swing.

0 голосов
/ 23 августа 2011

Ваш код работает для меня, используя Sun JDK 1.6.0_26 и Clojure 1.2.1 в Ubuntu 11.04 ... Однако оконная рама очень маленькая, потому что она упакована вокруг маленькой метки "Bar".Вы уверены, что не пропустили это, и окно фактически находится где-то на вашем рабочем столе?

Кроме того, насколько я помню (я могу ошибаться здесь), но я подумал, что были проблемы с Swing с Ubuntu-default IcedTea JRE - если вы используете это, попробуйте вместо этого подходящую Sun / Oracle JRE.

...