1

重複の可能性:
スレッドの 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)

create-server への最初の呼び出しの前の行で "port" の値が 3457 であることがわかっているため、明らかに -main の行が問題になることはありません。また、このエラーは Thread-1 にあることに気付いたので、どういうわけかこのコードが理解できない方法で繰り返されていると考えています。

何かご意見は?

4

1 に答える 1