我有一个 GUI,当单击一个按钮时,必须启动一个 while 循环。但是在启动 while 循环时,GUI 将暂停,直到 while 循环终止。有什么办法可以规避这种情况吗?
问问题
778 次
4 回答
2
我想通常要防止这种情况发生,您应该Thread
为冗长的计算创建另一个,然后通过 EDT 更新 GUI(使用SwingUtilities.invokeLater(Runnable);
)
因此,在您的情况下,按下该按钮时,它将如下所示:
final Thread thread = new Thread(
new Runnable(){
public void run(){
while(condition){
.....
}
//update gui
}
}
);
thread.start();
或者,如果您使用的是 Java 8,则可以使用 lambda:
final Thread thread = new Thread(
() -> {
while(condition){
.....
}
//update gui
}
);
thread.start();
while
您可以通过使用interface
充当某种侦听器来删除该循环。
于 2013-08-31T17:34:45.680 回答
0
将您的 while 循环包装在 Runnable 中,并使用线程启动该 runnable。注意:new Thread(r).run();
将在同一个线程上运行它。下面的代码不应该。
Runnable r = new Runnable() {
public void run() {
while(whatever){
//do stuff
}
}
}
new Thread(r).start();
于 2013-08-31T17:37:34.413 回答
0
正如@kayton 所说,将您的代码包装在 Runnable 中。(或者也许是可调用的)
但是,如果您在整个代码中不断创建和启动自己的线程,很快就会变得难以管理。改为查看 ExecutorService 或 SwingWorker。
于 2013-08-31T17:44:55.003 回答
0
从设计角度来看,这更多是在建议方面,而不是解决技术问题,我认为暂停 GUI 不是一个好主意。您可以显示一个旋转的圆圈,告诉用户窗帘后面正在发生一些动作。暂停屏幕可能会让用户感到厌烦。
于 2013-08-31T18:53:54.523 回答