itr*_*tro 1 java user-interface swing swingworker
我使用swingworkers来提取zipfile,并将提取的prosecc附加到GUI中的textArea.它只从压缩文件中提取一个项目,并且没有在textArea中显示任何内容.
有谁能建议任何解决方案?
public class UnzipWorkers extends SwingWorker<String,Void> {
private WebTextArea statusTextArea;
private File archive,outputDir;
public UnzipWorkers(WebTextArea statusTextArea,File archive,File outputDir) {
this.archive=archive;
this.outputDir=outputDir;
this.statusTextArea = statusTextArea;
}
@Override
protected String doInBackground() throws Exception {
statusTextArea.append(String.valueOf(System.currentTimeMillis()));
try {
ZipFile zipfile = new ZipFile(archive);
for (Enumeration e = zipfile.entries(); e.hasMoreElements(); ) {
ZipEntry entry = (ZipEntry) e.nextElement();
unzipEntry(zipfile, entry, outputDir);
}
} catch (Exception e) {
OeExceptionDialog.show(e);
}
return "Extracted successfully: " + archive.getName() + "\n";
}
@Override
protected void done() {
super.done();
try {
statusTextArea.append( get());
FileTreePanel.btnRefresh.doClick();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
private String unzipEntry(ZipFile zipfile, final ZipEntry entry, File outputDir) {
String success = "Extracted failed: "+ entry + "\n";
if (entry.isDirectory()) {
createDir(new File(outputDir, entry.getName()));
}
File outputFile = new File(outputDir, entry.getName());
if (!outputFile.getParentFile().exists()){
createDir(outputFile.getParentFile());
}
try {
BufferedInputStream inputStream = new BufferedInputStream(zipfile.getInputStream(entry));
BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(outputFile));
IOUtils.copy(inputStream, outputStream);
outputStream.close();
inputStream.close();
success="Extracted successfully: " + entry + "\n";
}catch (IOException io){
OeExceptionDialog.show(io);
}catch (NullPointerException n){
OeExceptionDialog.show(n);
}catch (ArithmeticException a){
OeExceptionDialog.show(a);
}
return success;
}
private void createDir(File dir) {
if (!dir.exists()) {
try {
dir.mkdirs();
} catch (RuntimeException re) {
OeExceptionDialog.show(re);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
SwingWorker
不指定作品这种方式,定期输出doInBackground()
是否有方法process()
和publish()
,可以
1)使用Runnable#Thread
代替SwingWorker
然后你的代码通过添加JTextArea.append()
,包装工作invokeLater()
2)添加process()
或publish()
到SwingWorker
,此方法中把IOStream
和附加到JTextArea
周期性
3)我建议使用方法get()来实现原因
归档时间: |
|
查看次数: |
602 次 |
最近记录: |