gpt4 book ai didi

Java Swingworker 在 propertyChangeListener 处停止工作 100

转载 作者:行者123 更新时间:2023-12-01 11:51:09 24 4
gpt4 key购买 nike

我仍在构建一个程序来测试图像。为了更新 GUI,我创建了一个 swingworker,他工作得很好,直到我达到了 101 个选定文件的神奇数量。
我需要测试一个目录中的数百个图像,并且不想将它们分成每个包含 101 个图像的 block 。那么有人知道为什么它在没有激活完成方法的情况下停止工作吗?
为了更清楚地说明:
测试Img 1,测试Img 2,....测试Img X(x <= 100),测试Img 101停止,没有测试或完成或错误Img 102(只是没有进展)我能找到的唯一消息是PropertyChangeEvent测试 101 个图像后点击“完成”。但属性仍应更改,进度条显示 99%,弹出窗口显示 101/102。 (用数字进行测试直到 100 都工作正常,并在最后显示 100% 和 100/100,而我的日志收到消息“完成”!

我用这个worker更新的是一个进度条和一个带有当前%(进度条)和当前图像(例如101/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();
}

这是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]  

那么有人知道问题出在哪里吗?也许我对自己的代码太代码盲而无法找到它。

问候和感谢
佐里安

最佳答案

当您使用 i>100 调用 setProgress(i) 时,它会抛出

new IllegalArgumentException("the value should be from 0 to 100");

您可以将其替换为 setProgress(i*100/iMax)

异常永远不会被捕获,只会导致线程异常停止。

关于Java Swingworker 在 propertyChangeListener 处停止工作 100,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28814137/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com