我有一个GUI,其中当点击一个按钮时,必须启动一个while循环。但在启动while循环时,GUI将暂停,直到while循环终止。有什么办法可以绕过这个吗?Java while while循环没有暂停当前线程
回答
我想一般防止这种情况发生,就应建立另一个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
进行循环。
谢谢,那很好。 – user1959216
将你的while循环包装在一个Runnable中,并开始使用线程运行。注意:new Thread(r).run();
将在同一个线程上运行它。下面的代码不应该。
Runnable r = new Runnable() {
public void run() {
while(whatever){
//do stuff
}
}
}
new Thread(r).start();
正如@kayton所说,将您的代码包装在Runnable中。 (或者可能是Callable)
但是,如果您不断创建并在您的代码中创建自己的线程,它很快就会变得难以管理。改为查看ExecutorService或SwingWorker。
为什么downvote?至少有礼貌和勇气来解释。 – user949300
从设计的角度来看,这更多的是建议,而不是解决技术问题,我认为暂停GUI并不是一个好主意。你可以展示一个旋转的圆圈,告诉用户窗帘后面有一些动作。暂停屏幕可能会让用户恼火。
- 1. 暂停while循环但while循环不应该停止
- 2. Java while循环和线程!
- 3. while while循环? (JAVA)
- 4. JAVA while while循环
- 5. while while循环Java
- 6. While循环问题:不会暂停
- 7. Android - 使用while循环停止线程
- 8. while循环不会停止循环Java
- 9. Java while while循环不循环
- 10. while while while循环while循环
- 11. Java while while循环问题
- 12. Java while while循环问题
- 13. while while while while while循环
- 14. java while循环
- 15. Java while循环
- 16. while循环Java
- 17. Java while循环
- 18. 线程在Java中与while循环
- 19. bash的while循环线程
- 20. time.sleep块while循环线程
- 21. ANDROID - while循环内线程
- 22. while循环没有执行
- 23. while while循环
- 24. while while循环
- 25. Java ... while循环程序
- 26. while循环在EOF之前停止线程
- 27. 的Java while循环没有的println
- 28. pthread_cond_wait没有while循环
- 29. Ruby嵌套while循环提前停止
- 30. c while循环停止前条件
我想你应该提供一些代码。 –
在新线程中启动你的while循环。 – pepuch
http://docs.oracle.com/javase/tutorial/uiswing/concurrency/ – assylias