Avatar billede olmer Nybegynder
19. maj 2003 - 11:50 Der er 4 kommentarer og
2 løsninger

Underlig exception ved brug af listiterator

Jeg har flg kode

public static LinkedList lock = new LinkedList();
ListIterator it = existTables.listIterator();
ListIterator lit = lock.listIterator();
......



while(lit.hasNext())
        System.out.println(((ReadWriteLock) lit.next()).getname());


Når jeg eksekverer koden får jeg flg exception

Exception in thread "main" java.util.ConcurrentModificationException
        at java.util.LinkedList$ListItr.checkForComodification(LinkedList.java:548)
        at java.util.LinkedList$ListItr.next(LinkedList.java:484)
        at STSQL.Server.STSQLServer.<init>(STSQLServer.java:42)
        at STSQL.Server.STSQLServer.main(STSQLServer.java:50)

håber i kan hjælpe mig med en løsning for det er da irriterende

Olmer
Avatar billede olmer Nybegynder
19. maj 2003 - 11:51 #1
println er castet til et object der inholder metoden getname

Olmer
Avatar billede arne_v Ekspert
19. maj 2003 - 11:58 #2
Du har ændret i din LinkedList efter at du har lavet iteratoren.

Det må man ikke.
Avatar billede arne_v Ekspert
19. maj 2003 - 11:59 #3
Fra dokumentationen:

public ListIterator listIterator(int index)
Returns a list-iterator of the elements in this list (in proper sequence), starting at the specified position in the list. Obeys the general contract of List.listIterator(int).
The list-iterator is fail-fast: if the list is structurally modified at any time after the Iterator is created, in any way except through the list-iterator's own remove or add methods, the list-iterator will throw a ConcurrentModificationException. Thus, in the face of concurrent modification, the iterator fails quickly and cleanly, rather than risking arbitrary, non-deterministic behavior at an undetermined time in the future
Avatar billede erikjacobsen Ekspert
19. maj 2003 - 12:03 #4
Mnjah, arne. Men læs hans kode... :)

Du skal IKKE oprette din iterator før du skal bruge den, og før du dermed
putter ting i den. Lav din 'lit' i linien før while-sætningen



ListIterator lit = lock.listIterator();
while(lit.hasNext())
  System.out.println(((ReadWriteLock) lit.next()).getname());
Avatar billede olmer Nybegynder
19. maj 2003 - 12:11 #5
Mange tak for den hurtige respons, og ja det hjalp at flytte Iterator erklæringen

håber ikke i har noget imod at dele pointene

Olmer
Avatar billede erikjacobsen Ekspert
19. maj 2003 - 12:12 #6
Helt i orden med mig - hvis du altså forstår hvorfor den skal flyttes
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester