我刚刚开始尝试使用 Swing 使用 Clojure 创建 UI。但是我在尝试加载它时遇到了 CompilerException。我一直在关注本教程' https://stuartsierra.com/2010/01/02/swing-into-actions-with-clojure '。
我正在使用带有 Cursive 的 IntelliJ IDEA 社区,使用 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)
编辑:另外,当我重新启动 REPL 并第一次加载文件时,我收到此错误:
Loading src/sportseer_client/core.clj...
CompilerException java.awt.AWTError: Assistive Technology not found: org.GNOME.Accessibility.AtkWrapper, compiling:(core.clj:12:13)
不知何故,当我单独在 repl 中搞乱时,我已经让这个示例工作了,然后可以毫无问题地从文件加载。除了使用其他导入功能外,不知道我做了什么不同的事情:
(import '(javax.swing JOptionPan JButton JFrame JPanel))
但我不能再复制它并让它发挥作用。
任何帮助我指出正确的方向来解决这个问题将不胜感激。