2016-09-12 35 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