我还在构建测试图像的程序。为了更新GUI我做了一个swingworker并且他工作正常,直到我达到101个选定文件的神奇数量
我需要在一个目录中测试数百个图像,并且不想将它们分别用于101个图像的块。所以有人有一个想法,为什么它停止工作而不激活完成方法?
为了更清楚地说明:
测试Img 1,测试Img 2,....测试Img X(x <= 100),测试Img 101停止,没有测试或完成或错误Img 102(只是没有进展)只有消息我可以找到ist that that PropertyChangeEvent点击&#34; DONE&#34; 101个测试图像后。但该属性仍应更改,progressBar显示99%,popUp显示101/102。 (使用数字测试到100都可以正常工作并在结束时显示100%和100/100,而我的日志收到消息&#34; DONE&#34;!
我用这个工人更新的是progressBar和带有当前%(progressBar)和当前图像(例如101/110)的popUp
这是摆动工作者本身:
private void work(final File filex)
{
worker = new SwingWorker<Void, Integer>()
{
@Override
protected Void doInBackground() throws Exception
{
File file = filex;
if (file.isDirectory())
{
File[] listOfFiles = file.listFiles();
iMax=listOfFiles.length;
for (i= 0; i< iMax; i++)
{
aktionenTest(listOfFiles[i]); //processing/working here
setProgress(i);
}
setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
}
else
{
iMax = 1;
i = 1;
aktionenTest(file);
setProgress(i);
}
return null;
}
@Override
protected void process(List<Integer> chunks)
{
}
@Override
protected void done()
{
if(worker.isCancelled())
{
log.append("Cancelled!");
setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
}
else
{
log.append("DONE");
}
}
};
worker.addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent event) {
System.err.println(event);
log.append(""+event+newline);
if(event.getPropertyName().trim().equals("progress"))
{
if(event.getOldValue().equals(0))
{
popupCounter((Integer) event.getNewValue());
}
if(iMax == 1)
{
maxProg = iMax;
curProg = ((Integer) event.getNewValue())*100/maxProg;
progressBar.setValue(curProg);
popupUpdate((Integer) event.getNewValue());
}
else
{
maxProg = iMax;
curProg = (((Integer) event.getNewValue()+1))*100/maxProg;
progressBar.setValue(curProg);
popupUpdate((Integer) event.getNewValue());
}
}
}
});
worker.execute();
}
这里是101之前的PropertyEvent的输出
java.beans.PropertyChangeEvent[propertyName=progress; oldValue=99; newValue=100; propagationId=null; source=components.Bilderexplorer$4@79885c3a]
和101之后(但仍有Img 102)
java.beans.PropertyChangeEvent[propertyName=state; oldValue=STARTED; newValue=DONE; propagationId=null; source=components.Bilderexplorer$4@79885c3a]
所以有人知道问题是什么吗?也许我从我自己的代码中找到了代码盲。
迎接并感谢 Zorian
答案 0 :(得分:1)
当您使用i&gt; 100致电setProgress(i)
时,它会抛出
new IllegalArgumentException("the value should be from 0 to 100");
您可以使用setProgress(i*100/iMax)
异常永远不会被捕获,只会导致线程异常停止。