java执行程序有进度条

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方法里面执行吧!

你可能感兴趣的:(java)