Isa*_*aac 6 java swing clojure race-condition
我已经尝试使用OpenGL通过Penumbra尝试使用其Graphics上下文直接在JPanel上绘图.
这将是很好的,除了我遇到了一些麻烦...我编译我的代码,并且〜25次中的〜1次,图形(这是一个例子的矩形)绘制得很好.其他~24次,它没有.
这是我的代码:
(def main
(let [frame (JFrame. "This is a test.")
main-panel (JPanel. (GridBagLayout.))
tpan (proxy [JPanel] [] (getPreferredSize [] (Dimension. 600 400)))]
(doto frame
(set-content-pane
(doto main-panel
(grid-bag-layout
:gridx 0 :gridy 0
tpan
:gridx 0 :gridy 1
xy-label)))
(pack-frame)
(set-visible))
(draw-line tpan Color/RED 250 250 50 50)))
Run Code Online (Sandbox Code Playgroud)
功能draw-line如下:
(defn draw-line [panel color x y w h]
(let [graphics (.getGraphics panel)]
(doto graphics
(.setColor color)
(.drawRect x y w h))))
Run Code Online (Sandbox Code Playgroud)
我不知道发生了什么事.起初我以为这是我正在研究的参考文献,但后来我把它们拿出来,仍然有这些问题.我也重置了lein和slime/swank和emacs.我很困惑.
像往常一样,任何帮助将不胜感激.我希望这是一个有答案的问题!最近,我似乎在问不可能:)
确保您始终在EDT.如果你看到你的GUI随机起作用通常是原因.比赛条件对摆动至关重要,因为它的设计完全是单线程的.
您可以尝试,只是为了看到,找到任何与swing组件交互并让它打印出Thread.getCurrentThread().toString()(或非常接近的东西)的方法.
它应该总是打印出一个线程名称,你会在那里看到嵌入字母的AWT.您甚至可以存储该线程,在每次调用Swing时对其进行测试,并断言它是否不相同.
实际上我不知道为什么Sun从来没有构建一个JDK的"调试"版本,当这样的事情发生时会断言(就像从一个非awt线程中调用一些swing线程一样......)
| 归档时间: |
|
| 查看次数: |
569 次 |
| 最近记录: |