Ich lade den Inhalt einer Datei nach JList
Komponente. Wenn ich das Laden im Hauptthread durchführe, scheint alles in Ordnung zu sein - der Inhalt wird geladen. Aber wenn ich den Ladecode in einen separaten Thread verschiebe, ein Element in einer Liste auswähle und versuche, die Liste neu zu laden, erhalte ich zufällige NullPointer
o IndexOutOfBounds
Ausnahmen. Ich bin sicher, dass dies eine Art von Swing-Threading-Problem ist, kann aber nicht feststellen, was.
Dies ist mein Thread-Code:
@Override
public void run() {
List<String> textLines = null;
textLines = splitter.split(model.getLedMaxChars(), textLoader.loadText(file));
listener.onTextLoaded(textLines);//listener is in main Swing code
}
Der Controller ist für das Zuhören zuständig:
@Override
public void onTextLoaded(List<String> textLines) {
view.fileLoaded(model.getCurrentFile());
view.setTextLines(textLines);
view.enableListComponent();
}
Und die Ansicht wird aktualisiert:
public void setTextLines(List<String> textLines) {
jList.setListData(textLines.toArray());
}
Ich habe versucht, den Faden hängen zu lassen, indem ich while(true);
Schleife - dann funktioniert alles gut. Wenn ich auf neu laden drücke, ohne ein Element in einer Liste auszuwählen, funktioniert auch alles.
Kann mir jemand erklären, was ich hier übersehe?