【发布时间】:2014-12-16 02:04:31
【问题描述】:
这可能是一个基本问题,但我一直坚持。
我想进一步了解为什么当我从按钮单击事件启动新线程(可运行)时 GUI 会被阻止?我该如何克服呢?我做错了什么?
下面的代码在单击时会启动一个新线程,但是我想在单击该按钮时更改文本框的背景颜色,但我无法做到这一点,而且主 ui 在该线程时无响应运行时,我相信我通过启动一个新线程来正确实现它,以免阻塞主 ui,但我一定错过了一些东西,因为这显然是不希望的行为。
代码:
private void startButtonEvent(ActionEvent evt) {
ntmStatusText.setBackground(Color.green);// textbackground I want to change
//Start Ntm Thread
Thread thread = new Thread(new NtmThread());
thread.start();
while(thread.isAlive()){
System.out.println("thread still working");
}
System.out.println("thread stopped");
}
如何阻止我的 Ui 在运行线程时变得无响应?
【问题讨论】:
-
'while(thread.isAlive()){'NONONO!不要在 GUI 事件处理程序中等待。不要循环,不要加入(),不要等待事件。不要! GUI 处理程序线程是一个状态机。不要在里面等。不要循环任何标志。不要循环任何线程状态。不要在 GUI 事件处理程序中等待。从来没有。
-
好的,这就是解释,我永远不会再这样做了!感谢您的帮助。
-
:) 好吧,我可能有点醉了……
-
@MartinJames 派对!!
-
没问题,这证明了你的知识能够在有点醉的时候回答,另一方面,我可能应该考虑不要在早上 0100 尝试学习编程 :) 哈哈。
标签: java multithreading swing runnable