Java sleep()在实际的sleep命令之前停止执行代码

时间:2015-03-26 21:21:40

标签: java swing

我有一个gui,我想显示一些文字,然后等一下。

我的代码看起来像这样:

//do something (add JTextArea, revalidate, repaint)
try{
    Thread.sleep(4000);
}
    catch(InterruptedException e){
}

"某事"应该执行,然后代码应该等待。但是,我看到"某事"只有在等待时间结束后才会发生。我怎样才能达到预期的行为?

1 个答案:

答案 0 :(得分:3)

是的,正如我想的那样,你在Swing事件线程中调用了sleep。

解决方案:不要。在事件线程上调用Thread.sleep(...)将阻止它执行必要的操作,包括绘制GUI(这就是为什么您没有看到预期的睡前更改)。

使用Swing Timer或后台线程。解决方案的细节取决于您的问题。


在您的编辑中,您声明:

  

我有一个gui,我想显示一些文字,然后等一下。

然后使用Swing Timer。您可以在此处找到该教程:How to use Swing Timers。简而言之,您将时间延迟和ActionListener传递给Timer的构造函数,您将要将其设置为不重复,然后在其上调用start。延迟发生后,将调用ActionListener的代码。