私はかなり基本的なテストプログラムを書いています(私は、LWJGLのOpenGLクラスの周りにラッパーを書いていますが、それは以前はコンカレントプログラムを書いたことがないので、マルチスレッディングを行うことにしました)。 プログラムが終了すると、私はいつも警告を受け取りますinvokeStaticMethodへの呼び出しを解決できませんか?
私は実際にプログラムが主な機能を開始する前に警告を受け取ります。
Reflection warning, NO_SOURCE_PATH:1 - call to invokeStaticMethod can't be resolved.
私も、コンパイル時に警告を得ることはありません、私はむしろ奇妙見つける:混乱のため申し訳ありませんが(私はこれが私のすべてでプログラムが、Clojureの自体ではなく、何かではないかもしれないと思います)。とにかく、ここにプログラムされています
(ns opengltuts.core
(:import (org.lwjgl.opengl GL11 Display))
(:use opengltuts.opengl)) ;my wrapper
(def world-state (ref {:running true :color [1.0 0.0 0.0 1.0]}))
(defn render-world [state]
(apply glClearColor (:color state))
(glClear GL11/GL_COLOR_BUFFER_BIT)
(Display/update))
(defn render []
(Display/create)
(loop []
(let [world @world-state]
(when (:running world)
(do (render-world world)
(recur)))))
(Display/destroy))
(defn -main []
; without the annotation, I get a warning here too.
(let [render-thread (doto (Thread. ^Runnable render) (.start))]
(Thread/sleep 3000)
(dosync (commute world-state assoc :color [0.0 1.0 0.0 1.0]))
(Thread/sleep 3000)
(dosync (commute world-state assoc :running false))
(.join render-thread)))
これはおそらく(私はClojureの中で、あなたが通常new Thread
ではなく、むしろエージェントか何かでスレッドを開始していないが、私は完全にはないことを聞いて、あまりにも慣用ではありませんどのように動作するのか把握していますが)問題ではない短いプログラムを推測します。
単純なスレッドが必要な場合は、エージェントの代わりに 'future'を使用できます。すなわち '(未来(レンダリング))'です。また、 'Thread/sleep'はOKです。http://clojuredocs.org/clojure_core/clojure.core/futureを参照してください。 – noahlz
警告は' opengltuts.opengl'から来ていないのでしょうか?どこかで、オーバーロードされた静的メソッドを呼び出していて、正確な呼び出しを解決できません。実行時に発生することに関して、実行時にコードを生成していますか? – noahlz
@noahzいいえコードを生成していません。そして、これはプログラムの終わりに起こります。私はすでにopengl関数を呼び出していることが長いです。 また、将来のためにこれはちょっと奇妙です。それは私にいくつかの点を保存しますが、今では、いつ終了するか分からないので、最後に(シャットダウンエージェント)という奇妙な呼び出しが必要です。ああ、もちろん、副作用を引き起こすゼロ値を逆参照しても、私と一緒に座っているわけではありません。 私はタイミングが間違っていました - 私は主な機能に入る前に警告を受け取ります。 – Cubic