2011-12-31 114 views
0

我想創建一個簡單的程序,將上傳我的一些文件到Windows共享。我擁有所有基本功能,但是我有一些收尾問題。我有一個GUI,我只想顯示一些關於上傳的信息 - 進度條和標籤。下面是代碼:setText和setValue無法正常工作

private void btn_UploadActionPerformed(java.awt.event.ActionEvent evt) { 

    upl.setFiles(files); 

    for(int i = 0; i < files.length; i++){ 
     progressLabel.setText("Uploading " + files[i].getName()); 
     upl.uploadFile(i); 
     uploadProgress.setValue(uploadProgress.getValue() + 90/files.length); 

    } 

    uploadProgress.setValue(100); 

} 

,當用戶按下上傳按鈕被執行。問題是,setText和setValue實際上並不像他們應該那樣工作。當我按上傳按鈕時,上傳開始(並完成),但標籤上的文本不會改變,進度條也不會改變。只有在上傳完成後纔會更改。

的全部源代碼可以在這裏找到:Code

有什麼建議? P.S.在相當新的java :)

回答

3

第二JB Nizet,在某些情況下,使用後臺線程而不是事件分派線程可防止用戶界面在任務運行時凍結。

從Java教程

FYI,

擺動程序員涉及以下類型的線程:

  • 初始線程,即執行初始應用程序代碼的線程。

  • 事件調度線程,在那裏執行的所有事件處理代碼。與Swing框架交互的大多數代碼也必須在此線程上執行。

  • 工作線程,也被稱爲後臺線程,其中耗時的後臺任務被執行。
+0

謝謝!我還沒有與線程工作......但我想是時候開始。 – Squeazer 2011-12-31 14:12:35

+0

@Squeazer是啊,這是正確的時間:)快樂的編碼,歡呼聲.. – COD3BOY 2011-12-31 14:15:12

4

你正在做事件調度線程上傳。因此,在完成上傳之前,不能執行在同一個線程中執行的繪畫代碼。事件處理代碼應該儘快完成。如果你有很長的任務需要執行,它應該在一個單獨的後臺線程中執行。

使用SwingWorker來做你想做的事。 Its javadoc有一個很容易理解的例子。

+0

感謝您的幫助! – Squeazer 2011-12-31 16:02:26