Ich lade Inhalt einer Datei zu JList
Komponente. Wenn ich das Laden im Hauptthread mache, scheint alles in Ordnung zu sein - Inhalt wird geladen. Aber wenn ich Ladecode in einen separaten Thread verschiebe, wähle ein Element in einer Liste aus und versuche, die Liste neu zu laden, bekomme ich zufällige NullPointer
oder IndexOutOfBounds
Ausnahmen. Ich bin mir sicher, dass dies eine Art Swing-Threading-Problem ist, aber nicht bestimmen kann, was.JList setListData Threading Probleme
Das 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
}
Controller ist für das Hören verantwortlich:
@Override
public void onTextLoaded(List<String> textLines) {
view.fileLoaded(model.getCurrentFile());
view.setTextLines(textLines);
view.enableListComponent();
}
Und die Aussicht Updates:
public void setTextLines(List<String> textLines) {
jList.setListData(textLines.toArray());
}
Ich habe versucht Thread zu lassen hängen Sie, indem Sie while(true);
Schleife hinzufügen - dann funktioniert alles OK. Wenn ich erneut lade, ohne das Element in einer Liste auszuwählen, funktioniert alles auch.
Kann mir jemand erklären, was ich hier vermisse?
Sie vermissen, dass fast jede einzelne Operation im Zusammenhang mit Swing-Komponenten auf dem EDT getan werden muss? – SyntaxT3rr0r