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