我还在建设一个程序来测试图像。为了更新图形用户界面,我制作了一个摆动工具,他工作得很好,直到我点击101个选定文件的魔法数量。
我需要一个目录来测试几百个图像和不希望他们sperate每101个图像块。那么有没有人有一个想法,为什么它停止工作,没有激活完成的方法?
为了使它更清楚:
测试图1,测试图2,....测试Img X(x < = 100),测试Img 101停止,不测试或完成或错误图102(只是不进行)只有消息我可以发现,PropertyChangeEvent在101个测试图像后点击“完成”。但该属性仍然应该改变,progressBar显示99%,popUp显示101/102。 (测试数字,直到100都工作正常,并显示在结束100%和100/100,而我的日志得到消息“完成”!的Java SwingWorker的停止在工作的PropertyChangeListener在100
我更新此工作者,是一个progressBar和popUp与当前%(进度条)和当前图像(eg101/110)
这里的的SwingWorker本身:
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();
}
这里的PropertyEvent的前101
java.beans.PropertyChangeEvent[propertyName=progress; oldValue=99; newValue=100; propagationId=null; [email protected]]
和101之后(输出但仍有图102离开)
java.beans.PropertyChangeEvent[propertyName=state; oldValue=STARTED; newValue=DONE; propagationId=null; [email protected]]
那么,有人有什么想法是什么问题?也许我对我自己的代码有太多的代码来找到它。
问候和感谢
Zorian
哪里是在代码“DONE”?在这个for循环中,你正在增加“o”而不是“i”,无论是什么。 'for(i = 0; i
DSquare
2015-03-02 16:05:33
SRY我拼写错误,而将来自我用的,因为他们在上下文中有意义的隐秘变量的代码,但在片段和英语的原因是没有意义不是我的自然语言(我改变了它的片断;)) – Zorian 2015-03-02 16:16:16