在Clojure中使用Swing-编译器异常:无法初始化RepaintManager

时间:2019-03-27 15:33:24

标签: swing clojure compiler-errors leiningen repaintmanager

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

但是我无法再复制它并使它工作。

在为我指出正确方向方面的任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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

我知道在docker中运行Alpine Linux发行版时会遇到CompilerException java.lang.NoClassDefFoundError: Could not initialize class错误-尽管它是另外一个错误:java.lang.NoClassDefFoundError: Could not initialize class sun.awt.image.IntegerInterleavedRaster

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

有关此问题的更多信息:

答案 2 :(得分:-1)