线程休眠的工作方式与预期不同

时间:2018-05-06 17:32:24

标签: java

我对Java很新,想知道我在这个代码出错的地方

    for(int i=0; i<10; i++) {
        textArea.setText("\n***Iterate***\n");
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e1) {
            // TODO Auto-generated catch block
        }
    }

我期望这样做是为了每次迭代,它应该有一秒的间隔。但是,当它运行时,它会休眠10秒钟,然后for循环运行,就像没有thread.sleep()一样。

1 个答案:

答案 0 :(得分:1)

如果这是在EDT上完成的(你应该因为你正在更新Swing组件),那就是因为你要阻止EDT 10秒钟。

考虑使用Swing计时器。 https://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html

class MyActionListener implements ActionListner {
  Timer mytimer;
  int count;
  public void actionPerformed(ActionEvent evt) {
    textArea.setText("\n***Iterate***\n");
    if( ++count > 10 ) mytimer.stop();
  }
};

MyActionListener task = new MyActionListener();
Timer timer = new Timer(1000, task )
task.mytimer = timer;
timer.setRepeats( true );
timer.start();

代码未经测试。