Java - 每秒重绘一次组件?

时间:2010-06-04 08:51:07

标签: java

我想在每秒后重新绘制组件,但它不起作用。我在想的是:

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

2 个答案:

答案 0 :(得分:9)

我建议使用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可能不合适,因为它通常用于具有已定义的开始和结束的后台任务,而不是定期任务。

答案 1 :(得分:1)

确保您没有为此操作UI线程。如果您在UI线程中执行此循环,则永远不会调度repaint事件。

另一个说明; sleep是一个静态方法,应该以{{1​​}}的形式调用。 (无论如何都无法做Thread.sleep(...)。)

执行此操作的“正确”方法可能是使用thatThread.sleep(...)。看看the tutorial

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