簡體   English   中英

setText和setValue不能正常工作

[英]setText and setValue not working properly

我正在嘗試創建一個簡單的程序,它將為我上傳一些文件到Windows共享。 我具有所有基本功能,但是在最后潤色方面存在問題。 我有一個GUI,我只想顯示一些有關上傳的信息-進度欄和標簽。 這是代碼:

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不能真正正常工作。 當我按上載按鈕時,上載開始(並完成),但標簽上的文本不會更改,進度條也不會更改。 它們僅在上傳完成后更改。

完整的源代碼可以在這里找到: 代碼

有什么建議么? PS在java中相當新:)

您正在事件分配線程中上載。 因此,在同一線程中執行的繪畫代碼要等到上傳完成后才能執行。 事件處理代碼應盡快完成。 如果要執行的任務很長,則應在單獨的后台線程中執行它。

使用SwingWorker可以做您想做的事情。 它的javadoc有一個易於理解的示例。

第二個JB Nizet,在某些情況下,使用后台線程代替事件分發線程可以防止任務運行時用戶界面凍結。

僅供參考,來自Java教程,

Swing程序員處理以下幾種線程:

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

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

  • 工作線程 ,也稱為后台線程,在其中執行耗時的后台任務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM