Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
代理无法实现java.lang.Thread_Java_Clojure - Fatal编程技术网

代理无法实现java.lang.Thread

代理无法实现java.lang.Thread,java,clojure,Java,Clojure,我正试图用java实现这一点 window.addWindowListener(new WindowAdapter() { @Override public void windowDestroyNotify(WindowEvent arg0){ new Thread(){ @Override public void run(){

我正试图用java实现这一点

window.addWindowListener(new WindowAdapter() {
            @Override
            public void windowDestroyNotify(WindowEvent arg0){
                new Thread(){
                    @Override
                    public void run(){
                        animator.stop();
                        System.exit(0);
                    }
                }.start();
            };
        });
就像在clojure这样

 (.addWindowListener (proxy [WindowAdapter][]
                         (windowDestroyNotify [arg0]
                           (.start (proxy [java.lang.Thread][]
                                     (run
                                       (.stop ani)
                                       (System/exit 0)))))))
但当我运行它时,它会给我这个错误

CompilerException java.lang.IllegalArgumentException: Don't know how to create ISeq from: clojure.lang.Symbol, compiling:     (program/core.clj:36:36)
36:36是“(代理[java.lang.Thread]”的开始位置


为什么它不能实现java.lang.Thread

这个异常有误导性,但问题是在代理
线程
中的
run
方法的实现中,它缺少参数向量

以下表达式在编译时生成相同的异常:

(proxy [Thread] [] (run (inc 1)))
而这一个没有:

(proxy [Thread] [] (run [] (inc 1)))

误导性错误是因为
代理
宏如何解析其参数。

异常是误导性的,但问题在于代理
线程
中的
运行
方法的实现中缺少参数向量

以下表达式在编译时生成相同的异常:

(proxy [Thread] [] (run (inc 1)))
而这一个没有:

(proxy [Thread] [] (run [] (inc 1)))

产生误导性错误的原因是代理宏如何解析其参数。

重新开始并从小块开始慢慢构建:

(let [t (Thread. #(println "going 1")) ]
  (.start t))

;=> going 1

(let [t (proxy [Thread] []
          (run [] (println "going 2")))
]
  (.start t))

;=> going 2
因此,您可以看到问题不在于
代理
线程
,而在于您周围的代码

更新 Juan首先注意到了这个问题,因为
运行时缺少arglist
[]
。通过在上阅读文档并缓慢地构建示例,我自动在示例代码中获得了arglist


我发现,通过“综合”来理解一个问题可以让你绕过许多问题。这通常比通过“分析”来理解一个问题要快得多,也要容易得多,即从成品开始,然后试图找出导致问题的原因。

重新开始,从小块开始慢慢构建:

(let [t (Thread. #(println "going 1")) ]
  (.start t))

;=> going 1

(let [t (proxy [Thread] []
          (run [] (println "going 2")))
]
  (.start t))

;=> going 2
因此,您可以看到问题不在于
代理
线程
,而在于您周围的代码

更新 Juan首先注意到了这个问题,因为
运行时缺少arglist
[]
。通过在上阅读文档并缓慢地构建示例,我自动在示例代码中获得了arglist

我发现,通过“综合”来理解一个问题可以让你绕过许多问题。这通常比通过“分析”来理解一个问题要快得多,也容易得多,即从成品开始,然后试图找出导致问题的原因