Hallo,
ich arbeite derzeit an einem kleinen Programm und habe ein Problem mit folgendem Teil.
Die ArrayList text ist anfangs leer und wird nach und nach mit Werten gefüllt. Die paint-Methode sorgt dafür, dass immer alle Elemente der ArrayList dargestellt werden.
Wenn allerdings paint gerade mit der Darstellung beschäftigt ist und der Iterator hochzählt und gleichzeitig mit addString die ArrayList erweitert wird, dann kommt es zu dem Fehler java.util.ConcurrentModificationException.
Das ist wohl von Java so gewünscht, ist in meinem Fall aber ziemlich lästig.
Die Alternative, die ich mir überlegt habe, ist ziemlich umständlich und unelegant:
Ich könnte statt einer ArrayList ein statisches Array verwenden. Die Dimension vorzugeben wäre kein Problem, allerdings müsste ich beim Hinzufügen jedesmal die erste ffreie Stelle des Arrays ermitteln, an die der neue Wert geschrieben werden soll. Und wenn ich das Array in einer Schleife durchlaufe, muss ich für jede Array-Position prüfen, ob die Position belegt ist oder null enthält.
Meine Frage ist nun, ob es andere, elegantere Möglichkeiten gibt, mein Ziel zu erreichen. Kann man das Programm dazu bringen, den oben erwähnten ArrayList-Fehler ignorieren? Oder gibt es eine grundsätzlich andere Vorgehensweise, die geeignet ist?
Viele Grüße
Christian
ich arbeite derzeit an einem kleinen Programm und habe ein Problem mit folgendem Teil.
Java:
public class GUI extends Frame implements ActionListener{
private ArrayList<String> text;
//Constructor
GUI(){
this.addWindowListener(new WindowClosingAdapter(true));
this.setSize(900,500);
this.setVisible(true);
}
public void addString(String s){
text.add(s);
}
public void paint(Graphics g){
String s;
int d = 0;
for(Iterator<String> i = text.iterator(); i.hasNext();){
d++;
s = i.next();
g.drawString(
s,
getInsets().left + 50,
getInsets().top + 100 + d*20
);
}
}
}
Die ArrayList text ist anfangs leer und wird nach und nach mit Werten gefüllt. Die paint-Methode sorgt dafür, dass immer alle Elemente der ArrayList dargestellt werden.
Wenn allerdings paint gerade mit der Darstellung beschäftigt ist und der Iterator hochzählt und gleichzeitig mit addString die ArrayList erweitert wird, dann kommt es zu dem Fehler java.util.ConcurrentModificationException.
Das ist wohl von Java so gewünscht, ist in meinem Fall aber ziemlich lästig.
Die Alternative, die ich mir überlegt habe, ist ziemlich umständlich und unelegant:
Ich könnte statt einer ArrayList ein statisches Array verwenden. Die Dimension vorzugeben wäre kein Problem, allerdings müsste ich beim Hinzufügen jedesmal die erste ffreie Stelle des Arrays ermitteln, an die der neue Wert geschrieben werden soll. Und wenn ich das Array in einer Schleife durchlaufe, muss ich für jede Array-Position prüfen, ob die Position belegt ist oder null enthält.
Meine Frage ist nun, ob es andere, elegantere Möglichkeiten gibt, mein Ziel zu erreichen. Kann man das Programm dazu bringen, den oben erwähnten ArrayList-Fehler ignorieren? Oder gibt es eine grundsätzlich andere Vorgehensweise, die geeignet ist?
Viele Grüße
Christian