0

我的代码:

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

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

4

2 回答 2

2

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

  1. 重绘请求;
  2. 调用function
  3. 另一个重绘请求。

请注意:如果functioncontains Thread.sleep,并且看起来确实如此,那么您将再次阻止 EDT。如果你想画一些东西,让它停留一会儿,然后画别的东西,那么你需要用 Swing's 安排第二个图像的绘制Timer

于 2013-05-06T14:50:49.387 回答
1

在不同的线程上启动您的函数。如果这不可行,请查看 JComponent 的 paintImmediately 方法。

于 2013-05-06T14:50:40.437 回答