我花了很多时间试图理解这一点。我创建了一个JApplet,它在循环中使用Thread.sleep()来动画applet。但是当我试图运行Applet时,屏幕保持空白。当我在一个单独的线程中绘制动画并调用重绘时,applet完美地运行。我已经看到很多解释为什么会发生这种情况,但没有一个是非常全面的。
什么线程调用paint方法?为什么那个线程不能部分画在画布上,暂停,然后继续绘制?我注意到一些Thread.sleep()调用按预期工作,特别是当它们不在循环中时。
答案 0 :(得分:1)
UI需要重新绘制,这发生在UI线程上。
因此你不应该控制UI线程 - 你似乎正在这样做(带有.sleep()的动画循环)。
您应该返回对UI线程的控制(退出您所在的函数),以便重新绘制它。
查看Swing Painting和SwingWorker,了解如何运行后台线程来完成一些工作,然后在UI线程上更新UI。