Использование Swing в Clojure - исключение компилятора: не удалось инициализировать RepaintManager - PullRequest
0 голосов
/ 27 марта 2019

Я только начал пытаться создать пользовательский интерфейс с Clojure, используя Swing. Но я получаю CompilerException при попытке загрузить его. Я следовал этому уроку 'https://stuartsierra.com/2010/01/02/swing-into-actions-with-clojure'.

Я использую IntelliJ IDEA Community с Cursive, использую Leiningen и Clojure 1.8, и я использую Linux Mint 19.1 (если это даже имеет значение).

Мой код:

(defn say-hello []
  (JOptionPane/showMessageDialog
    nil "Hello, World!" "Greeting" JOptionPane/INFORMATION_MESSAGE))

(def act (proxy [ActionListener] []
           (actionPerformed [event] (say-hello))))

(def button (doto (JButton. "Click Me!")
              (.addActionListener act)))

(def panel (doto (JPanel.)
             (.add button)))
(def frame (doto (JFrame. "Hello Frame")
             (.setSize 800 800)
             (.setContentPane panel)
             (.setVisible true)))


(def frame (doto (JFrame. "SportSeer")
             (.setSize 800 800)
             (.setVisible true)))

При запуске через nREPL я получаю:

Loading src/sportseer_client/core.clj... 
CompilerException java.lang.NoClassDefFoundError: Could not initialize class javax.swing.RepaintManager, compiling:(core.clj:12:13) 

Edit: Кроме того, когда я перезапускаю REPL и загружаю файл в первый раз, я получаю эту ошибку:

Loading src/sportseer_client/core.clj... 
CompilerException java.awt.AWTError: Assistive Technology not found: org.GNOME.Accessibility.AtkWrapper, compiling:(core.clj:12:13)

Каким-то образом этот пример работал, когда я возился с одним реплеем, а затем смог загрузить его из файла без проблем. Не знаю, что я сделал по-другому, за исключением использования другой функции импорта:

(import '(javax.swing JOptionPan JButton JFrame JPanel))

но я больше не могу копировать это и заставить это работать.

Буду весьма признателен за любую помощь, указав мне правильное направление, чтобы исправить это.

Ответы [ 3 ]

1 голос
/ 27 марта 2019

Я думаю, что эта проблема возникла из-за использования OpenJDK, а не OracleJDK. У меня больше нет этой проблемы с тех пор, как я изменил SDK проекта на OracleJDK, поэтому, если у кого-то еще будет эта проблема в будущем ... это может быть исправлено.

0 голосов
/ 29 марта 2019

Я видел CompilerException java.awt.AWTError: Assistive Technology not found при попытке запустить код генерации PDF (который использует AWT) на сервере Linux с OpenJDK 8. После перехода на JDK 10/11 ошибка исчезла.

Может быть много "забавных" проблем с графическим кодом, особенно когда вы работаете на сервере без надлежащего отображения.

Я знаю, что мы получаем ошибку CompilerException java.lang.NoClassDefFoundError: Could not initialize class в этом случае при запуске дистрибутива Alpine Linux в Docker, хотя это была другая ошибка: java.lang.NoClassDefFoundError: Could not initialize class sun.awt.image.IntegerInterleavedRaster

В нашем случае это в конечном итоге связано с пакетом fontconfig. Для Apline Linux помогло следующее: apk --update add ttf-dejavu

Подробнее об этой проблеме:

0 голосов
/ 27 марта 2019
...