ERLEDIGT
NEIN
NEIN
ANTWORTEN
9
9
ZUGRIFFE
468
468
EMPFEHLEN
-
Hallo, aus irgendeinem Grund bricht mein Programm ab, sobald ich einen Iterator zuweise. Weiss leider nicht, welche Exception geworfen wird, weil das vom Tomcat nicht ausgegeben wird (gibts da vielleicht ne Moeglichkeit den etwas aussagefreundlicher zu machen ?). Die fragliche Methode ist in einem Bean und wird aus einer JSP aus aufgerufen. Der Inhalt ist erstmal nur Quatsch, da es mir nur drum geht das Durchlaufen der Collection zu testen.
Code :1 2 3 4 5 6 7 8 9 10 11 12
public String kickEmptyElements(Collection coll, String pattern){ String s = "test"; if(coll!=null){ Iterator it = coll.iterator(); while(it.hasNext()){ s+=it.next().toString()+"<br>"; if (it.next().toString().equals(pattern)) it.remove(); } } return s; }
Sobald ich die die Methode aufrufe krachts. Ich habe dann schrittweise auskommentiert, der Fehler liegt in der Zeile " Iterator it = coll.iterator();", da bricht das Programm ab.
Hab ich irgendwas nicht beachtet?
DHDiese Nachricht wurde elektronisch erstellt und ist auch ohne Unterschrift gültig.
-
19.10.05 18:49 #2
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.
Du kannst den fehlerhaften Code Block ja einfach mal in try - catch Anweisungen schreiben - also die geworfene Ausnahme fangen und (auf den Servlet Ausgabestream) ausgeben:
Code :1 2 3 4 5
try { Iterator it = coll.iterator(); } catch (Exception e) { return "Fehler: " + e.getMessage(); }
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Das funktioniert nicht. Als Ausgabe erhalte ich
Aber eine Exception wird ja offensichtlich geworfen, sonst kaeme es nicht zu der Ausgabe.Fehler: null
Vielleicht gibts ja aber auch ne viel leichtere Loesung fuer das Problem, weshalb ich eigentlich die Methode brauche. Habe eine ArrayList - Collection, bestehend aus Objekten vom Typ "Element". die Elemente deren Inhalt dem Argument pattern gleicht sollen aus der collection entfernt werden. Vielleicht gibts ja ne viel einfachere Loesung als ueber die Elemente der collection zu iterieren und die Inhalte zu vergleichen.Diese Nachricht wurde elektronisch erstellt und ist auch ohne Unterschrift gültig.
-
Hi!
Das hört sich nach einer NullPointerException an. Wenn du das Programm debugst, und durchstepst, welchen Wert bzw. Inhalt hat deine Collection?
TOMalles Gute kommt von ...
-
20.10.05 14:55 #5
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Das ist insoweit OK das es nicht unbedingt eine Detailfehlermeldung geben muß - also die Methode getMessage einer Exception kann auch null zurückgeben.
Zitat von Der Held
Dann schreib einfach malin den catch-Block. Das sollte etwas Licht ins Dunkle bringen weil zumindest der konkrete Name der Exception ausgegeben wird.Code :1
return "Fehler: " + e.toString ();
Also wenn du Java 1.5 und Generics verwendest könntest du auch eine foreach-Schleife nehmen um über die Elemente zu iterieren. Aber sonst fällt mir spontan keine bessere Möglichkeit ein.
Zitat von Der Held
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Das wirft mir der Debugger aus:
Ich verstehe nicht warum bereits das Erhalten des Iterators von der Collection einen Fehler erzeugt. Wenn ich die Collection einfach ausgeben lasse, sieht das so aus:this= ExportBean (id=122)
coll= ArrayList<E> (id=140)
elementData= Object[10] (id=155)
modCount= 3
size= 3
pattern= " "
was IMHO auch richtig ist, denn sie besteht aus 3 Elementen.[[Element: ], [Element: ], [Element: ]]Diese Nachricht wurde elektronisch erstellt und ist auch ohne Unterschrift gültig.
-
20.10.05 17:05 #7
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Aha. Du verwendest also tatsächlich schon die Generics von Java 5. Dann stimmt natürlich die Zuweisung die du da machst nicht.
Code :1
Iterator<Element> it = coll.iterator ();
Die foreach-Schleife kannst du übrigens doch nicht verwenden weil du ja Elemente aus der Collection entfernen willst.
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Generics? Nicht dass ich wuesste. Wo kommen denn im Quellcode im ersten Posting Generics vor?
Aber jetzt kommt ja erst das interessante:
Der Quellcode mit dem Fehler war sozusagen der Prototyp fuer die Methode, mit dem ich erstmal experimentieren wollte. Ich habe dann die Methode so geschrieben wie ich mir vorstelle wie das funktionieren sollte: Kein Fehler. An der Zuweisung des Iterators ist jedoch nichts anders! Warum geht denn jetzt diese Variante und die obige nicht *staun*
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
/** * Takes a Colelction of org.jdom.Element and removes those without Attributes * @param coll * @return the cleared Collection */ private Collection kickElementsWoAttributes(Collection coll){ if(!coll.isEmpty()){ Iterator it = coll.iterator(); while(it.hasNext()){ Element x = (Element) it.next(); if(x.getAttributes().isEmpty()) { it.remove(); } } } return coll; }
Anmerkung:
Im Protoypen war der Rueckgabewert String um die Reuckgabe in der JSP auszugeben.
Den Parameter pattern hab ich rausgeworfen, da die Methode sowiso nur auf Elements angewandt wird und da kann ich auch gleich Attributlose rausschmeissen, anstatt die Signatur eines attributlosen Elements als String mitzuuebergeben.Diese Nachricht wurde elektronisch erstellt und ist auch ohne Unterschrift gültig.
-
Dein Problem liegt daran, dass du in dieser while Schleife auf dem Iterator 2 mal next() aufrufst und somit "fast" immer eine NullPointerException entsteht.
Code :1 2
s+=it.next().toString()+"<br>"; if (it.next().toString().equals(pattern)) it.remove();
besser so
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
public String kickEmptyElements(Collection coll, String pattern){ String s = "test"; if(coll!=null){ Iterator it = coll.iterator(); while(it.hasNext()){ Object o = it.next(); s+=o.toString()+"<br>"; // Was du hier machen willst ist mir nicht klar. //if (o.toString().equals(pattern)) it.remove(); } } return s; }
-
Autsch! Du hast recht. Oh, darauf haett ich kommen sollen. Deshalb gehts in der finalen Version natuerlich, die ist "sauber" gechrieben. Manchmal sieht man den Wald vor lauter Baeumen nicht.
Merci an alle Beteiligten.Diese Nachricht wurde elektronisch erstellt und ist auch ohne Unterschrift gültig.
Ähnliche Themen
-
XPresso Iterator
Von axn im Forum Cinema 4DAntworten: 2Letzter Beitrag: 26.03.10, 21:58 -
Matrix & Iterator
Von schickano im Forum C/C++Antworten: 3Letzter Beitrag: 09.01.10, 15:13 -
Iterator liefert Mist
Von little-smile im Forum C/C++Antworten: 3Letzter Beitrag: 28.05.09, 18:40 -
iterator problem
Von sim26 im Forum JavaAntworten: 4Letzter Beitrag: 01.09.06, 15:51 -
Iterator am Anfang setzen
Von lernen.2007 im Forum JavaAntworten: 1Letzter Beitrag: 08.01.06, 00:02





Zitieren
Login





