2014-02-13 46 views
0

我無法在我的程序獲取URL時顯示「加載」消息。我嘗試了使用幾種不同的方法,例如Thread,SwingWorkerSwingUtilities,但是「加載」消息在獲取網頁後總是顯示出來。如何在取得網頁前顯示「載入」?在Java Swing中使用HttpURLConnection顯示「加載」消息

public static void get(String url) 
{ 
    content.add(new JLabel("Loading...")); 
    content.repaint(); 

    SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      // load webpage 
     } 
    }); 
} 
+0

基本上,你這樣做是錯誤的。 GUI應該在invokeLater()或invokeAndWait()中更新。 –

+0

所以我想調用invokeLater()兩次?一次用於「加載」,一次用於實際內容? –

+0

否。不要將長時間運行的代碼放在invokeLater中。它應該在後臺工作線程中完成。如果在這樣的線程中調用get(),則將代碼放在那裏。否則,你可以使用類似SwingWorker的東西。 –

回答

4

但「加載」消息始終顯示了其獲取網頁後。

然後您的代碼阻止了EDT,因此GUI無法重新繪製自己。

我試着用幾種不同的方法,如... SwingUtilities類,

你貼使用的invokeLater(代碼)是錯誤的,因爲你仍在執行的EDT長時間運行的任務。

我試着用幾種不同的方法,如螺紋,SwingWorker的, -

這些都是正確的做法。長時間運行的任務應該在Thread或Swing worker的doInBackground()方法中執行。

請參閱Concurrency的Swing教程中的部分了解更多信息。