[英]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
。 然后,您的代码将向队列添加三个单独的工作项:
function
的调用; 请注意:如果function
包含Thread.sleep
,并且看起来确实如此,那么您将再次阻止EDT。 如果您想绘画某些东西,将其放置一会儿,然后再绘画其他东西,则需要使用Swing的Timer
安排第二幅图像的绘画。
在其他线程上启动函数。 如果这不可行,请查看JComponent的paintImmediately方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.