繁体   English   中英

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

[英]Java - two repaint() functions - the first one doesn't repaint immediately

我的代码:

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

第一次重涂不会立即处理,而是等待第二次重涂,然后一起处理。 我怎么能立即调用重新粉刷而无需等到第二次?

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

  1. 重涂请求;
  2. function的调用;
  3. 另一个重画请求。

请注意:如果function包含Thread.sleep ,并且看起来确实如此,那么您将再次阻止EDT。 如果您想绘画某些东西,将其放置一会儿,然后再绘画其他东西,则需要使用Swing的Timer安排第二幅图像的绘画。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM