swing在执行的任务的时候,如何显示任务的进度条,我们来看看swing是如何实现的。
// 开始生成
public JProgressBar progressBar;//xml文件转换进度条
public JProgressBar imageprogressBar;//图片复制进度条
new SwingWorker<Long, Void>()//这个方法可以执行异步的线程,开启异步的线程
{
private int successed = 0;
private int failed = 0;
@Override
protected Long doInBackground() {//开始异步执行
buttonBeginStatus();//按钮置灰
addText("总计有:" + xmlFiles.size() + " 个文件需要转换.\r\n",0);
progressBar.setMaximum(xmlFiles.size());//以文件的个数作为进度条的长度
progressBar.setValue(0);//开始的时候设置进度条的值为0
statusLabel.setText(0+"/"+xmlFiles.size());
for (int i = 0; i < xmlFiles.size(); i++) {//看看要处理多少个文件
File srcXMLFile = xmlFiles.get(i);
copyImage(srcXMLFile);//先执行图片的复制
addText("正在生成[" + (i + 1) + "] -- " + srcXMLFile.getName() + "\r\n",0);
if(transformXML(srcXMLFile)){
progressBar.setValue(i+1);//每执行完一个进度条加1
statusLabel.setText((i+1)+"/"+xmlFiles.size());
addText("已完成[" + (i + 1) + "] -- " + srcXMLFile.getName() + " 的转换\r\n",0);
successed++;
}else{
String errorInfo="";
Set<String> strings=verifyD.failureInfo;
for (String string : strings) {
errorInfo+=string;
}
addText("出错:" + errorInfo + "\r\n",1);
addText("[" + (i + 1) + "] -- " + srcXMLFile.getName() + " 转换失败\r\n",1);
failed++;
}
}
return 0L;
}
@Override
protected void done() {//异步执行完成
addText("生成完成,成功数:"+successed+",失败数:"+failed+"\r\n",0);
buttonEndStatus();//按钮恢复
}
}.execute();
千万要注意,在执行的异步的时候,主线程不要再执行其他有关于异步用到的变量的操作,否则会造成线程不同步。如果非要执行,那么就在done方法里面执行吧!