【问题标题】:Clojure invokeLater null pointerClojure invokeLater 空指针
【发布时间】:2015-06-16 15:23:18
【问题描述】:

这段代码:

(import 'javax.swing.SwingUtilities)
(SwingUtilities/invokeLater (print "hi"))

导致此错误:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
...

我不知道这是否是个问题,因为代码本身实际上可以工作(打印到 REPL),尽管有错误。

但是,修改 swing 组件似乎无法正常工作:回调 (.setText myTextArea "some text") 的 carot 侦听器会导致文本在“some text”之间交替,并在单击时将其设置为空,每个时间在 nrepl-server 的日志中抛出相同的错误。

invoke later 的调用方式有问题还是与 myTextArea 的问题无关?

【问题讨论】:

    标签: swing concurrency clojure


    【解决方案1】:

    SwingUtilities/invokeLater 采用Runnable。 Clojure 函数实现了 Runnable。但是,您将(println "Hi")(即nil)的结果传递给invokeLater,因此是NPE。您需要将它作为要调用的函数传递,而不是自己调用它。此示例将匿名函数传递给 invokeLater。

    (import 'javax.swing.SwingUtilities)
    (SwingUtilities/invokeLater #(print "hi"))
    

    【讨论】:

      猜你喜欢
      • 2017-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-05
      • 1970-01-01
      • 1970-01-01
      • 2016-03-27
      • 1970-01-01
      相关资源
      最近更新 更多