【发布时间】:2011-12-31 03:57:59
【问题描述】:
我想要做的是让我的程序类中的某些部分代码等待一段时间,但我的问题是我尝试它的方式使我的 GUI 卡住了。我的意思是,按下一个按钮我让我的程序等待一段时间,当我的程序等待时我按下一个按钮,按钮被按下但之后如果我在程序仍在等待时尝试按下任何其他按钮我不能,我按下的第一个按钮似乎被按下,而另一个按钮无法按下,尽管程序做了我想做的事情(接受所有命令)唯一的问题是我的 GUI 被锁定了。
【问题讨论】:
标签: java
我想要做的是让我的程序类中的某些部分代码等待一段时间,但我的问题是我尝试它的方式使我的 GUI 卡住了。我的意思是,按下一个按钮我让我的程序等待一段时间,当我的程序等待时我按下一个按钮,按钮被按下但之后如果我在程序仍在等待时尝试按下任何其他按钮我不能,我按下的第一个按钮似乎被按下,而另一个按钮无法按下,尽管程序做了我想做的事情(接受所有命令)唯一的问题是我的 GUI 被锁定了。
【问题讨论】:
标签: java
您需要使用多个线程。任何需要完成且可能需要大量/明显时间的“工作”都需要在其自己的线程中完成。 (这当然包括您调用sleep 的任何代码。)
这里有 3 个很好的参考资料:
【讨论】:
对于您正在睡眠的部分以及按下第一个按钮后,您可以尝试以下操作:
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
}
//and whatever you need to do
}
});
如果您需要在按钮按下方法中使用任何局部变量,则它们需要是最终变量。
【讨论】:
您没有提供任何代码,因此无法直接输入您的代码。如果您使用的是 Swing 并且需要执行耗时的处理,请使用 Swing Worker 线程。下面是使用SwingWorker类的教程:
【讨论】:
您的 GUI 已加载并在一个线程上运行,您的等待功能在同一线程上运行,从而锁定了 GUI。您需要在单独的线程上启动等待功能。
【讨论】: