java - 更新标签时,EDT 无法使用递归方法正常工作

标签 java swing jlabel event-dispatch-thread settext

//搜索文件和目录

public  void getFile1(String directoryName) throws Exception {

    File directory = new File(directoryName);
    String str = directory.getName();
    File[] fList = directory.listFiles();
    if (fList != null) {
        for (File file : fList) {
            {                        

            if (file.isFile()) 
            {
                st = (file.toString());                 

               System.out.println(st);    
                jLable1.setText(st);//jLable1 is not updating.


                String fileName = file.getName();
                String strvirusCount=Integer.toString(virusCount); 
               }
            else if (file.isDirectory())

                    {
                      getFile1(file.getAbsolutePath());

                    }               

             globalCount++;       


    }

}

//检索所有文件和文件夹时无法更新标签 当进程开始检索路径时,Swing 表单没有响应。

最佳答案

您正在从事件分派(dispatch)线程执行一项需要很长时间的任务(递归地遍历每个文件)。因此,当该方法执行时,EDT 无法执行任何其他操作。因此它无法完成它应该做的事情:重新绘制组件并对用户事件使用react。

此任务应在单独的线程中完成,例如使用 SwingWorker ,它将定期通知其进度以更新标签文本。 javadoc 有示例。

关于java - 更新标签时,EDT 无法使用递归方法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22435029/

相关文章:

java - 如何在 switch-case 中使用 char 作为 case?

java - 没有应用程序可以执行此操作 android studio

java - 优化 Java 中的 Ungunzipping 过程?

java - 将 JPanel 添加到 JFrame : java. lang.IllegalArgumentException 的问题:无法添加到布局:约束必须是字符串(或 null)

java - 将 JButton 与 Canvas 结合使用

java - JLabel 组件中的几个图像快照

java - JLabel 没有在 JTabbedPane 上移动?

java - cucumber.json 报告被重新运行场景报告覆盖

java - 我怎样才能像这样组织我的框架?

java - jlable 的问题