2016-09-12 60 views
0

我给自己编了一个小帮手工具。它有一个按钮“运行”和“停止”的小GUI。如果我按“运行”程序执行循环,不断做一些事情(http请求 - 每小时几个)。Java |如何在“永久”循环运行时关闭JFrame?

但现在我遇到的问题是,当我按下“运行”时,按钮保持按下状态,程序/ GUI等待进程结束。在这段时间内,我无法关闭窗口或按下“停止”按钮。而且因为这个过程永远在运行,所以我永远无法结束它 - 当然我可以在任务管理器中结束这个过程。

有没有办法绕过这个问题?

我期待着一个有用的答案;-)

+1

开始运行永久循环的新线程。 –

+3

不要阻塞EDT(Event Dispatch Thread)。发生这种情况时,GUI将“冻结”。有关详细信息和修补程序,请参见[Swing中的并发](https://docs.oracle.com/javase/tutorial/uiswing/concurrency/)。 –

+0

也谢谢你! –

回答

2

没有一个代码只能猜测,但你最有可能运行在同一线程上的一切,这意味着它处理的按钮按该方法也可以启动这些请求。

这种方法的问题是,所有事情都是在事件派发线程上完成的,事件派发线程是处理事件和其他UI操作的线程。此线程上的任何冗长的操作都将使您的UI无法响应。

要解决此问题,您需要让您的Run事件处理程序启动线程完成所有工作。这将使EDT免费处理用户交互。

+0

谢谢先生,现在工作正常! 我想编辑我的第一篇文章的源代码不再需要:-) –

+0

@Leeengold:不客气。 – npinti