[英]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.