我還在建設一個程序來測試圖像。爲了更新圖形用戶界面,我製作了一個擺動工具,他工作得很好,直到我點擊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