//搜索文件和目录
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/