[英]Java - repaint component every second?
我想在每秒后重新繪制組件,但它不起作用。 我在想的是:
try{
while(true){
Thread.currentThread().sleep(1000);
gc.cb.next();
gc.repaint();
}
}
catch(Exception ie){
}
我建議使用javax.swing.Timer
來解決這個問題,它會定期在Event Dispatch線程上觸發一個ActionEvent
(注意你應該只調用重繪和/或操作來自這個線程的Swing組件)。 然后,您可以定義ActionListener
以攔截事件並在此時重新繪制組件。
例
JComponent myComponent = ...
int delay = 1000; //milliseconds
ActionListener taskPerformer = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
myComponent.repaint();
}
};
new Timer(delay, taskPerformer).start();
另請注意, SwingWorker
可能不合適,因為它通常用於具有已定義的開始和結束的后台任務,而不是周期性任務。
確保你沒有占用UI線程。 如果您在UI線程中執行此循環,則永遠不會調度repaint
事件。
另一個說明; sleep
是一個靜態方法,應該作為Thread.sleep(...)
調用。 (無論如何,無法做thatThread.sleep(...)
。)
這樣做的“正確”方法可能是使用SwingWorker
。 看看教程 。
如果您提供更多代碼,我們可以提供更好的答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.