2010-06-04 19 views
3

我想在每秒鐘後重新繪製組件,但它不起作用。我正在嘗試的是:Java - 每秒重繪組件?

try{ 
     while(true){ 
      Thread.currentThread().sleep(1000); 
      gc.cb.next(); 
      gc.repaint(); 
     } 
    } 
    catch(Exception ie){ 
    } 

回答

1

請確保你不佔用這個UI線程。如果你在UI線程中執行這個循環,那麼repaint事件將永遠不會被分派。

另一個說明; sleep是一種靜態方法,應該調用爲Thread.sleep(...)。 (無論如何都沒有做thatThread.sleep(...)的方法。)

這樣做的「正確」方法可能是使用SwingWorker。看看the tutorial

如果您提供更多的代碼,我們可以提供更好的答案。

9

對於這個問題,我會建議使用javax.swing.Timer,它會定期在事件分派線程上觸發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可能是不合適,因爲它是通常用於有一個定義的開始和結束,而不是週期性任務後臺任務。

+0

似乎有效,但我怎麼才能停止該計時器? – 2010-06-04 17:47:03

+1

您是否閱讀過Timer類的API?我想這個方法很明顯。 – camickr 2010-06-04 18:14:10