Java - 两个repaint()函数 - 第一个不立即重绘

时间:2013-05-06 14:46:45

标签: java repaint

我的代码:

...
this.mainWindow.desk.repaint();
....
function();
...
this.mainWindow.desk.repaint();
...

第一次重绘不会立即处理,而是等待第二次重绘,然后两者一起处理。我怎么能在不等到第二个的情况下立即重拍?

2 个答案:

答案 0 :(得分:2)

repaint仅在Event Dispatch Thread的工作队列中放置一个绘制请求。由于您可能在事件调度线程(在事件处理程序内)上运行代码,因此您阻止了对其他工作项的处理。解决这个问题的最简单方法是将function电话打包到Runnable并将其传递给EventQueue.invokeLater。然后您的代码将向队列中添加三个单独的工作项:

  1. 重绘请求;
  2. 致电function;
  3. 另一个重拍请求。
  4. 请注意:如果function包含Thread.sleep,而且似乎确实如此,那么您将再次阻止EDT。如果你想画一些东西,让它停留一段时间,然后画一些其他东西,那么你需要用Swing' Timer安排第二幅图像的绘画。

答案 1 :(得分:1)

在另一个线程上启动您的功能。如果这不可行,请查看JComponent的paintImmediately方法。