簡體   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