我想在每秒鐘後重新繪製組件,但它不起作用。我正在嘗試的是:Java - 每秒重繪組件?
try{
while(true){
Thread.currentThread().sleep(1000);
gc.cb.next();
gc.repaint();
}
}
catch(Exception ie){
}
我想在每秒鐘後重新繪製組件,但它不起作用。我正在嘗試的是:Java - 每秒重繪組件?
try{
while(true){
Thread.currentThread().sleep(1000);
gc.cb.next();
gc.repaint();
}
}
catch(Exception ie){
}
請確保你不佔用這個UI線程。如果你在UI線程中執行這個循環,那麼repaint
事件將永遠不會被分派。
另一個說明; sleep
是一種靜態方法,應該調用爲Thread.sleep(...)
。 (無論如何都沒有做thatThread.sleep(...)
的方法。)
這樣做的「正確」方法可能是使用SwingWorker
。看看the tutorial。
如果您提供更多的代碼,我們可以提供更好的答案。
對於這個問題,我會建議使用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
可能是不合適,因爲它是通常用於有一個定義的開始和結束,而不是週期性任務後臺任務。
似乎有效,但我怎麼才能停止該計時器? – 2010-06-04 17:47:03
您是否閱讀過Timer類的API?我想這個方法很明顯。 – camickr 2010-06-04 18:14:10