2015-06-16 3 views
0

Этот код:Clojure invokeLater нулевой указатель

(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), несмотря на ошибку.

Однако изменение компонентов качания не работает должным образом: прослушиватель карота, который вызывает обратный вызов (.setText myTextArea «некоторый текст»), вызывает чередование текста между «некоторым текстом» и настройкой его на пустые при нажатии, каждый раз бросая ту же ошибку в журнал nrepl-сервера.

Есть ли что-то не так с тем, как вызывается позже, или проблема с myTextArea не связана?

ответ

1

SwingUtilities/invokeLater принимает Runnable. Функции Clojure реализуют Runnable. Однако вы передаете результаты (println "Hi"), который является nil, чтобы invokeLater, следовательно, NPE. Вам нужно передать его как функцию, которую нужно вызвать, вместо того, чтобы называть ее самостоятельно. Этот пример передает анонимную функцию invokeLater.

(import 'javax.swing.SwingUtilities) 
(SwingUtilities/invokeLater #(print "hi")) 
Смежные вопросы