JApplet使用的线程细分

时间:2010-10-31 07:14:43

标签: java multithreading animation concurrency applet

我花了很多时间试图理解这一点。我创建了一个JApplet,它在循环中使用Thread.sleep()来动画applet。但是当我试图运行Applet时,屏幕保持空白。当我在一个单独的线程中绘制动画并调用重绘时,applet完美地运行。我已经看到很多解释为什么会发生这种情况,但没有一个是非常全面的。

什么线程调用paint方法?为什么那个线程不能部分画在画布上,暂停,然后继续绘制?我注意到一些Thread.sleep()调用按预期工作,特别是当它们不在循环中时。

1 个答案:

答案 0 :(得分:1)

UI需要重新绘制,这发生在UI线程上。

因此你不应该控制UI线程 - 你似乎正在这样做(带有.sleep()的动画循环)。

您应该返回对UI线程的控制(退出您所在的函数),以便重新绘制它。

查看Swing PaintingSwingWorker,了解如何运行后台线程来完成一些工作,然后在UI线程上更新UI。