主线程冻结包含java gui线程的所有其他线程

时间:2016-01-12 10:14:24

标签: java multithreading swing awt sleep

注意:我工作了很长时间并研究谷歌和stackoverflow,但我找不到答案。

我在JDialog中使用Thread.sleep()并冻结所有其他JDialog,JFrame和线程。

我的示例代码:

"GEOADD" "report-geo-set" "30.52439985197" "50.56539003041" "john"

在这种情况下,JDialog无法正确显示:

inccorect appear jdialog

但它必须是这样的:

true appear jdialog

我该如何解决这个问题。我想让主线程等待另一个线程。有人可以纠正我的示例代码或在这种情况下共享示例代码。

2 个答案:

答案 0 :(得分:0)

恕我直言,看起来你只有一个正在运行的线程。首先,我们绘制JDialog,之后,由于等待标志,您将睡眠主线程。 即。你不能执行你的按钮动作监听器,因此你无法唤醒你的线程。

希望它有助于理解。

答案 1 :(得分:0)

Thread.Sleep()只是暂停当前线程(即阻止它做任何事情,例如重绘,处理点击等),在你的情况下是UI thread

您需要使用工作线程。任何可能需要花费大量时间的主要工作需要在自己的线程中完成,这就是你想要睡觉的线程。它目前与UI组件一起运行,因此这就是您看到它们冻结的原因。

一个很好的参考是swing http://docs.oracle.com/javase/tutorial/uiswing/concurrency/

的并发文档

以下内容也可能有用:

http://java.sun.com/developer/technicalArticles/Threads/swing/ http://java.sun.com/products/jfc/tsc/articles/threads/threads1.html

相关问题