我对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()一样。
答案 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();
代码未经测试。