gpt4 book ai didi

java - 无响应 - 在 SWT 而非 jFace 中复制文件时

转载 作者:行者123 更新时间:2023-12-02 04:39:37 25 4
gpt4 key购买 nike

我必须在复制文件时显示进度条。我的代码显示进度条。复制文件时窗口没有响应。

这是我的代码:

Thread t = new Thread(new Runnable() {
@Override
public void run() {
try {
Display.getDefault().asyncExec(new Runnable() {
public void run() {
try {
SetupDir = new File(SWT_Second.currentDir.getAbsolutePath().concat(File.separator).concat("setup"));
count=numberOfFiles(SetupDir);
logFileHandle.writeBytes("\nTotal Number of Files.... "+count);
System.out.println("NEW COUNT"+count);
copyFiles(SetupDir,dartBaseDir);
logFileHandle.writeBytes("copy over..: ");
copy_next_button.setEnabled(true);
actualCopyFlag=true;
} catch (IOException e) {
e.printStackTrace();
};
}
});
} catch (Exception ex) {
ex.printStackTrace();
System.exit(0);
}
}
});
t.start();

复制文件的方法:

public static void copyFiles(final File srcDir,File destDir)  throws IOException{
String mkDir= null;
File mkDir1=null;
String cpDir= null;
File cpDir1=null;
pbar.setMinimum(0);
pbar.setMaximum(count);

for (File f : srcDir.listFiles()) {
System.out.println("Copying for file : " + f.getAbsolutePath());
if(f.isDirectory())
{
System.out.println("INSIDE DIRECTORY LOOP");
System.out.println("It is a directory"+f.getName());
cpDir=srcDir.getAbsolutePath().concat(File.separator).concat(f.getName());
cpDir1=new File(cpDir);
System.out.println("cpDir: "+cpDir);
mkDir = destDir.getAbsolutePath().concat(File.separator).concat(f.getName());

mkDir1 = new File(mkDir);
System.out.println("mkDir : "+mkDir);
if( !mkDir1.exists() ) {
mkDir1.mkdir();
}
copyFiles(cpDir1, mkDir1);
}
else
{ pb++;
System.out.println("It is simple a file .....");
File newFile = new File(destDir.getAbsolutePath().concat(File.separator).concat(f.getName()));
System.out.println("newFile: "+newFile);

Files.copy(Paths.get(f.getAbsolutePath()), Paths.get(newFile.getAbsolutePath()), StandardCopyOption.COPY_ATTRIBUTES);

pbar.setSelection (pb+1);
int x=pb+1;
System.out.println("bar.setSelection (j+1): "+x );
System.out.println("copy done for "+f.getAbsoluteFile() +" to "+newFile);
}
System.out.println("Copy done for : " + f.getAbsoluteFile());
}

}
}

复制文件时,shell 窗口自动不响应。

帮助将不胜感激..!!

最佳答案

您对 Display.getDefault().asyncExec 的调用正在用户界面线程中运行整个复制文件操作,这会导致它变得无响应。

相反,您应该在每次想要更新用户界面时调用asyncExec。所以

 ... copy file code in background thread

Display.getDefault().asyncExec(new Runnable() {
public void run() {
pbar.setSelection (pb+1);
}
});

关于java - 无响应 - 在 SWT 而非 jFace 中复制文件时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30318556/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com