Java Swing 多线程和 ui 卡住

标签 java swing swingworker concurrency

这个我想不通。使用 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]);
      }
   }

}

任何例子都会有所帮助。

最佳答案

invokeLater 所做的与您期望的完全相反 - 它在 EDT 上运行操作,这解释了行为。

关于Java Swing 多线程和 ui 卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9012163/

相关文章:

java - 在 JFrame 内容被删除、重新验证和重新绘制后,如何使 Java JLabel 显示在 JFrame 上?

java - JTable 单元格日期呈现器

java - Swing Worker 未正确刷新 JFrame

具有数组返回类型的 Java ImageWorker 发布/处理方法

java - 复制目录和文件时需要有 JProgress 条来衡量进度

java - 如何从 RESTFul Web 服务访问本地文件

java - 在 Accumulo 表上运行 mapreduce 作业时出现 TApplicationException 异常

java - 将键值对添加到 hashMap 时,为什么 Java 会更改 hashMaps 的 hashCode?

java - 无法运行maven

java - 在主窗口中切换 JPanel