[英]Java Swingworker stops working at propertyChangeListener at 100
我仍在構建程序來測試圖像。 為了更新GUI,我做了一個搖擺工,他工作得很好,直到我擊中了101個選定文件的神奇數目。
我需要在一個目錄中測試數百張圖像,並且不想將它們分割成101張圖像的塊。 那么,有誰知道,為什么不激活完成的方法就停止工作?
為了使其更清楚:
測試圖1,測試圖2,....測試圖X(x <= 100),測試圖101停止,沒有測試或完成或錯誤圖102(只是不進行)僅消息我可以發現PropertyChangeEvent經過101張測試圖像后,點擊“完成”。 但是該屬性仍應更改,並且progressBar顯示99%,彈出窗口顯示101/102。 (測試直到100的數字都可以正常工作,並在日志顯示消息“ DONE”時顯示在100%和100/100的末尾!
我使用此工作程序更新的是一個progressBar和一個帶有當前%(progressBar)和當前圖像(eg101 / 110)的彈出窗口
這是秋千工人本身:
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(但仍然有102圖)
java.beans.PropertyChangeEvent[propertyName=state; oldValue=STARTED; newValue=DONE; propagationId=null; source=components.Bilderexplorer$4@79885c3a]
那么,有人對這個問題有一個想法嗎? 也許我對自己的代碼太盲目找不到。
問候和感謝
Zorian
當您使用i> 100調用setProgress(i)
,它將拋出
new IllegalArgumentException("the value should be from 0 to 100");
您可以將其替換為setProgress(i*100/iMax)
永遠不會捕獲該異常,而只會導致線程異常停止。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.