afsdfdlecosdfsfdcco
19-12-2007, 12:42
Allora, ho questo metodo che si occupa di togliere da un ArrayList di Download i download completati o cancellati. Il problema è che mi lancia una ConcurrentModificationException (dove ho messo la freccia) e non capisco perche'! Ogni Download e' un Runnable ed il download avviene quindi in parallelo.
public void removeCompletedOrCancelledDownloads()
{
Iterator<Download> iterator = downloadList.iterator();
while (iterator.hasNext())
{
Download download = iterator.next(); <------- questa riga da problemi
System.out.println("staus: " + download.getStatus()); // per il debug
if (download.getStatus() == Download.COMPLETE || download.getStatus() == Download.CANCELLED)
{
clearDownload(downloadList.indexOf(download));
}
}
}
public void clearDownload(int row)
{
downloadList.remove(row);
// Fire table row deletion notification to table.
fireTableRowsDeleted(row, row);
}
Come posso risolvere? Grazie :)
edit: ah, l'eccezione salta fuori solo se ci sono almeno due download nell'array list (non importa se completati o meno). Con un solo download il metodo termina correttamente :|
edit2: ho provato anche a sincronizzare l'accesso all'arraylist ma niente :(
public void removeCompletedOrCancelledDownloads()
{
Iterator<Download> iterator = downloadList.iterator();
while (iterator.hasNext())
{
Download download = iterator.next(); <------- questa riga da problemi
System.out.println("staus: " + download.getStatus()); // per il debug
if (download.getStatus() == Download.COMPLETE || download.getStatus() == Download.CANCELLED)
{
clearDownload(downloadList.indexOf(download));
}
}
}
public void clearDownload(int row)
{
downloadList.remove(row);
// Fire table row deletion notification to table.
fireTableRowsDeleted(row, row);
}
Come posso risolvere? Grazie :)
edit: ah, l'eccezione salta fuori solo se ci sono almeno due download nell'array list (non importa se completati o meno). Con un solo download il metodo termina correttamente :|
edit2: ho provato anche a sincronizzare l'accesso all'arraylist ma niente :(