Ok, kurze Einführung: Ich bzw wir (noch ein anderer Student + ich) arbeiten an einem Restaurant-Manager Projekt mit Hibernate und haben ein kleines Problem. In einer unserer Klassen kommt es zu "sporadischen" java.util.ConcurrentModificationException. Sporadisch heißt, das sie manchmal auftreten und manchmal nicht.
Das Problem tritt in der actionPerformed-Mehode auf. Wir benutzen Eclipse als Entwicklungsumgebung. Die Zeile, an die uns das Eclipse "führt" in der Exception habe ich gekennzeichnet. Hier ein kurzer Auszug:
Ok, noch n kurzer Auszug aus der Exception:
Ich kann mir gut vorstellen, das die Exception kommt, weil ich mehr als 1 mal ein Set von Produkten, Mitarbeitern bzw. Zutaten aus unserem Restaurant hole. Ich dachte jedoch immer, das wären dann neue Sets und die Iteratoren würden sich nicht gegenseitig "behindern".
Ich will jetzt nicht die unbedingt eine Lösung haben, aber vielleicht mal einen Denkansatz, wie und warum das ganze entsteht und wie wir es vielleicht ändern können. Leider muss die ganze Sache bis Mittwoch fertig sein. :roll:
MfG
Das Problem tritt in der actionPerformed-Mehode auf. Wir benutzen Eclipse als Entwicklungsumgebung. Die Zeile, an die uns das Eclipse "führt" in der Exception habe ich gekennzeichnet. Hier ein kurzer Auszug:
Code:
public void actionPerformed(ActionEvent event) {
String befehl = event.getActionCommand();
if (befehl.equals("mitarbeiterHinzufügen")){
Set mitarbeiter = new HashSet();
mitarbeiter = restaurant.getPerson();
// ...
}
if (befehl.equals("mitarbeiterLoeschen")){
if (mitarbeiterListe.getSelectedValue() != null){
Set mitarbeiter2 = new HashSet();
mitarbeiter2 = restaurant.getPerson();
Iterator i2 = mitarbeiter2.iterator();
while (i2.hasNext()){
Person person = (Person) i2.next(); // Fehler!!!
if(mitarbeiterListe.getSelectedValue().equals(person.getNachName())){
mitarbeiter2.remove(person);
}
}
// ...
}
}
if (befehl.equals("zuTageskarteAdden")){
if(produktListe.getSelectedValue() != null){
Tageskarte tageskarte = restaurant.getTageskarte();
Set tageskarteProdukte = new HashSet();
tageskarteProdukte = tageskarte.getProdukt();
Set produkte = restaurant.getProdukt();
Iterator i = produkte.iterator();
while (i.hasNext()){
Produkt produkt = (Produkt) i.next(); //Fehler!!!
if(produktListe.getSelectedValue().equals(produkt.getName())){
tageskarteProdukte.add(produkt);
}
}
//...
}
}
if (befehl.equals("ausTageskarteLoeschen")){
if(aktuelleTageskarte.getSelectedValue() != null){
Tageskarte tageskarte = restaurant.getTageskarte();
Set produkte = new HashSet();
produkte = tageskarte.getProdukt();
Iterator i = produkte.iterator();
while (i.hasNext()){
Produkt produkt = (Produkt) i.next(); // Fehler!!!
if (aktuelleTageskarte.getSelectedValue().equals(produkt.getName())){
zuloeschendesProdukt = produkt;
produkte.remove(produkt);
}
}
//...
}
}
if (befehl.equals("zutatLoeschen")){
if (zutatenList.getSelectedValue() != null){
Set zutaten2 = new HashSet();
zutaten2 = restaurant.getZutat();
Iterator i = zutaten2.iterator();
while (i.hasNext()){
Zutat zutat = (Zutat) i.next(); // Fehler
if(zutatenList.getSelectedValue().equals(zutat.getName())){
zutaten2.remove(zutat);
}
}
// ...
}
}
}
Ok, noch n kurzer Auszug aus der Exception:
Code:
java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:782)
at java.util.HashMap$KeyIterator.next(HashMap.java:818)
at net.sf.hibernate.collection.PersistentCollection$IteratorProxy.next(PersistentCollection.java:437)
at rmSystem.BossUI.actionPerformed(BossUI.java:708)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1786)
...
Ich kann mir gut vorstellen, das die Exception kommt, weil ich mehr als 1 mal ein Set von Produkten, Mitarbeitern bzw. Zutaten aus unserem Restaurant hole. Ich dachte jedoch immer, das wären dann neue Sets und die Iteratoren würden sich nicht gegenseitig "behindern".
Ich will jetzt nicht die unbedingt eine Lösung haben, aber vielleicht mal einen Denkansatz, wie und warum das ganze entsteht und wie wir es vielleicht ändern können. Leider muss die ganze Sache bis Mittwoch fertig sein. :roll:
MfG