Java - 每秒重绘组件?

3
我希望每秒钟重绘组件,但是它没有生效。我尝试的方法是:
    try{
        while(true){
            Thread.currentThread().sleep(1000);
            gc.cb.next();
            gc.repaint();
        }
    }
    catch(Exception ie){
    }
2个回答

10
我建议使用一个javax.swing.Timer来解决这个问题,它会定期在事件调度线程上触发一个ActionEvent(请注意,您应该只从此线程调用repaint和/或操作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
你读过Timer类的API吗?我认为要使用的方法很明显。 - camickr

1

请确保您不会独占UI线程。如果您在UI线程中执行此循环,则repaint事件将永远不会被分派。

另一个注意点是:sleep是一个静态方法,并且应该以Thread.sleep(...)的方式调用。(无论如何,没有办法做到thatThread.sleep(...)。)

可能做这件事的“正确”方式是使用SwingWorker。请查看教程

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接