2015-02-24 23 views
1

我的Java應用程序的工作流程後:搖擺:更改到一個JFrame一個又一個面板長時間運行的方法調用

  1. 獲得輸入關鍵字,然後將其轉化爲一個查詢,以HTTP POST
  2. 新一Jframe,女巫顯示了一些詞,如「關鍵字處理......請等待」。
  3. 在[1]中執行POST,可能需要很多分鐘。
  4. POST後返回結果,提取我需要的數據。
  5. 顯示在JFrame中的數據,它取代在內容[2]

我首先嚐試代碼Jframe的構造方法的流程邏輯。 但框架將掛在HTTP POST階段,並沒有顯示[2]中的單詞。 POST完成後,直接顯示[5]中的數據。

原因跳躍舞臺[2],用戶可能認爲過程阻塞意味着錯誤,它不做搜索工作。

現在我在階段[2]中添加一個JOptionPane.showMessageDialog。它會停止該過程,因爲需要用鼠標單擊對話框中的「確定」按鈕。 在那一刻,框架中的面板顯示「關鍵字處理...請等待」。

我想知道爲什麼MessageDialog的停止點可以繪製舊面板,這意味着[2]中的單詞。 如revalidate()或repaint()不要繪製舊面板。

回答

2

不要阻塞EDT(Event Dispatch Thread)。發生這種情況時,GUI將「凍結」。有關詳細信息和修正(請參閱Concurrency in Swing)(SwingWorker)。


BTW - 如圖this answer改變面板使用CardLayout

+0

非常感謝! [Swing中的併發](https://docs.oracle.com/javase/tutorial/uiswing/concurrency/)對我來說真的很有幫助! – Yshuan 2015-02-25 00:41:13

相關問題