我給自己編了一個小幫手工具。它有一個按鈕「運行」和「停止」的小GUI。如果我按「運行」程序執行循環,不斷做一些事情(http請求 - 每小時幾個)。Java |如何在「永久」循環運行時關閉JFrame?
但現在我遇到的問題是,當我按下「運行」時,按鈕保持按下狀態,程序/ GUI等待進程結束。在這段時間內,我無法關閉窗口或按下「停止」按鈕。而且因爲這個過程永遠在運行,所以我永遠無法結束它 - 當然我可以在任務管理器中結束這個過程。
有沒有辦法繞過這個問題?
我期待着一個有用的答案;-)
我給自己編了一個小幫手工具。它有一個按鈕「運行」和「停止」的小GUI。如果我按「運行」程序執行循環,不斷做一些事情(http請求 - 每小時幾個)。Java |如何在「永久」循環運行時關閉JFrame?
但現在我遇到的問題是,當我按下「運行」時,按鈕保持按下狀態,程序/ GUI等待進程結束。在這段時間內,我無法關閉窗口或按下「停止」按鈕。而且因爲這個過程永遠在運行,所以我永遠無法結束它 - 當然我可以在任務管理器中結束這個過程。
有沒有辦法繞過這個問題?
我期待着一個有用的答案;-)
沒有一個代碼只能猜測,但你最有可能運行在同一線程上的一切,這意味着它處理的按鈕按該方法也可以啓動這些請求。
這種方法的問題是,所有事情都是在事件派發線程上完成的,事件派發線程是處理事件和其他UI操作的線程。此線程上的任何冗長的操作都將使您的UI無法響應。
要解決此問題,您需要讓您的Run
事件處理程序啓動線程完成所有工作。這將使EDT免費處理用戶交互。
謝謝先生,現在工作正常! 我想編輯我的第一篇文章的源代碼不再需要:-) –
@Leeengold:不客氣。 – npinti
開始運行永久循環的新線程。 –
不要阻塞EDT(Event Dispatch Thread)。發生這種情況時,GUI將「凍結」。有關詳細信息和修補程序,請參見[Swing中的併發](https://docs.oracle.com/javase/tutorial/uiswing/concurrency/)。 –
也謝謝你! –