Thread.sleep(xx)但整个程序都在睡觉?

时间:2011-01-29 18:26:49

标签: java multithreading sleep

嘿..我有一个程序可以登记一些人..如果他们有一个部门,编程将显示一个列表的面板..

所以我想在几秒钟之后将面板设置为不可见..我怎么能这样做?

我创建了一个新的Thread(FadeThread)并在视图中启动它,但是现在,当我写的时候

Thread.sleep(5000)

整个程序睡眠时间为5秒,...我只想在后台等待5秒钟并将面板设置为可见(false),但整个UI和程序都会睡眠..

谢谢..

3 个答案:

答案 0 :(得分:5)

Thread.sleep()将暂停当前线程,我认为这是您案例中的事件调度程序线程。如果你在后台线程中执行它,它应该可以工作,但如果你不小心打电话给run()而不是start(),它就不会。

要执行具有设置延迟的代码,您必须使用Timer类。更清洁,你不必担心意外创建太多线程,不能正确退出线程等等。

答案 1 :(得分:3)

您正在使事件调度线程处于休眠状态,因此GUI无法对事件做出反应。

阅读Concurrency上Swing教程中的部分,了解更多信息和可能的解决方案。

答案 2 :(得分:1)

假设您正在使用Swing,请查看SwingWorker类。您可以创建一个阻止5秒钟的进程,然后以线程安全的方式隐藏面板。

或者你可以使用ScheduledExecutor,只要你确保使用invokeLater()在EDT上运行它。