Java Swing多线程和ui冻结
发布时间:2020-12-15 08:47:00 所属栏目:Java 来源:网络整理
导读:无法想出这个.使用worker或invokeLater,UI仍然会冻结.下载每个文件后,我想要更新JList.但是JList只会在胎面返回后更新. 这是代码: public class MyUi extends javax.swing.JFrame{ ... private void jButton2ActionPerformed(java.awt.event.ActionEvent ev
无法想出这个.使用worker或invokeLater,UI仍然会冻结.下载每个文件后,我想要更新JList.但是JList只会在胎面返回后更新.
这是代码: 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]); } } } 任何例子都会有帮助. 解决方法
在后台线程上下载文件,并在Runnable中包装updateJlist().
附录:正如@mre所说,SwingWorker还可以轻松报告中期结果,如here所示. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |