可能重复:
线程上的 Clojure 错误:java.lang.IllegalArgumentException:键必须是整数
这段代码很简单,我很困惑它怎么会出错。我有:
(defn create-server [port]
(let [ss (new ServerSocket port)]
(start-thread (fn [ss]
(while (not (. ss (isClosed)))
(try (listen-and-respond ss)
(catch SocketException e)))))))
(defn -main [& args]
(println "Server is starting")
(let [port (Integer/parseInt (first args))]
(println "port: " port)
(create-server port)))
我编译它,然后 uberjar 它,然后在命令行上启动它。这些行:
(println "Server is starting")
(println "port: " port)
打印出来:
服务器正在启动端口:3457
在下一行,create-server 被调用,我得到这个错误:
Exception in thread "Thread-1" clojure.lang.ArityException: Wrong number of args (0) passed to: core$create-server$fn
at clojure.lang.AFn.throwArity(AFn.java:437)
at clojure.lang.AFn.invoke(AFn.java:35)
at clojure.lang.AFn.run(AFn.java:24)
at java.lang.Thread.run(Thread.java:680)
显然,-main 中的行不会有问题,因为我知道“端口”在第一次调用 create-server 之前的行的值为 3457。我还注意到这个错误在 Thread-1 中,所以我认为这段代码以某种我不理解的方式重复出现。
有什么想法吗?