無法弄清楚這一點。使用worker或invokeLater,UI仍然凍結。在每個文件下載後,我想要更新JList。但JList只會在胎面返回後更新。Java Swing多線程和用戶界面凍結
下面是代碼:
public class MyUi extends javax.swing.JFrame{
...
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt){
SwingUtilities.invokeLater(new Runnable() {
//To get out of the event tread
public void run() {
dl();
}
});
}
private void dl(){
...
//ini and run the download class
Download myDownload = new Download();
myDownload.doDownload(myDlList);
}
public void updateJlist(String myString){
myModel.addElement(myString);
jList1.repaint();
}
}
public class Download{
...
public void doDownload(String[] fileName){
for(int i=0; i<fileName.length; i++){
...//download action...
//for my jList1 to be updated after each file.
MyUi.updateJlist(fileName[i]);
}
}
}
任何例子會有所幫助。
+1的SwingWorker與中期業績。 – mre
在後臺運行下載工作正常,我不需要換行updateJlist()。對於SwingWorker,我將需要閱讀更多內容並執行測試。我不完全理解它。謝謝! – marcb
我很高興它正在工作,但我仍然[很警惕](http://stackoverflow.com/a/7158505/230513)從非EDT線程更新GUI。如果你需要'SwingWorker'的幫助,請不要猶豫,發佈一個問題。 – trashgod