嘿..我有一个程序可以登记一些人..如果他们有一个部门,编程将显示一个列表的面板..
所以我想在几秒钟之后将面板设置为不可见..我怎么能这样做?
我创建了一个新的Thread(FadeThread)并在视图中启动它,但是现在,当我写的时候
Thread.sleep(5000)
整个程序睡眠时间为5秒,...我只想在后台等待5秒钟并将面板设置为可见(false),但整个UI和程序都会睡眠..
谢谢.. 的
答案 0 :(得分:5)
Thread.sleep()
将暂停当前线程,我认为这是您案例中的事件调度程序线程。如果你在后台线程中执行它,它应该可以工作,但如果你不小心打电话给run()
而不是start()
,它就不会。
要执行具有设置延迟的代码,您必须使用Timer
类。更清洁,你不必担心意外创建太多线程,不能正确退出线程等等。
答案 1 :(得分:3)
您正在使事件调度线程处于休眠状态,因此GUI无法对事件做出反应。
阅读Concurrency上Swing教程中的部分,了解更多信息和可能的解决方案。
答案 2 :(得分:1)
假设您正在使用Swing,请查看SwingWorker类。您可以创建一个阻止5秒钟的进程,然后以线程安全的方式隐藏面板。
或者你可以使用ScheduledExecutor,只要你确保使用invokeLater()
在EDT上运行它。