0

我刚刚开始尝试使用 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))

但我不能再复制它并让它发挥作用。

任何帮助我指出正确的方向来解决这个问题将不胜感激。

4

3 回答 3

1

我认为这个问题是由于使用 OpenJDK 而不是 OracleJDK 而发生的。自从将项目 SDK 更改为 OracleJDK 后,我不再遇到此问题,因此,如果将来有其他人遇到此问题……那可能是解决方法。

于 2019-03-27T15:47:52.930 回答
0

我已经看到CompilerException java.awt.AWTError: Assistive Technology not found尝试在具有 OpenJDK 8 的 linux 服务器上运行 PDF 生成代码(使用 AWT)时。切换到 JDK 10/11 后,错误消失了。

与图形相关的代码可能存在很多“有趣”的问题,尤其是当您在没有正确显示的服务器上运行时。

我知道CompilerException java.lang.NoClassDefFoundError: Could not initialize class在 docker 中运行 Alpine Linux 发行版时我们会遇到错误——尽管它是不同的:java.lang.NoClassDefFoundError: Could not initialize class sun.awt.image.IntegerInterleavedRaster

在我们的例子中,它最终与fontconfig包有关。对于 Apline Linux,以下帮助:apk --update add ttf-dejavu

关于这个问题的更多信息:

于 2019-03-29T08:12:19.967 回答
-1
于 2019-03-27T17:33:09.560 回答