[英]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.