Я загружаю содержимое файла в JList
. Если я загружаю основной поток, все кажется ОК - содержимое загружено. Но когда я перемещаю код загрузки в отдельный поток, выберите элемент в списке и попробуйте перезагрузить список, я получаю случайные NullPointer
или IndexOutOfBounds
исключения. Я уверен, что это какая-то проблема с потоками Swing, но не могу определить, что.JList setListData проблемы с потоком
Это мой код Тема:
@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
}
контроллер отвечает за прослушивание:
@Override
public void onTextLoaded(List<String> textLines) {
view.fileLoaded(model.getCurrentFile());
view.setTextLines(textLines);
view.enableListComponent();
}
И вид обновления:
public void setTextLines(List<String> textLines) {
jList.setListData(textLines.toArray());
}
Я пытался оставить нить зависайте, добавив while(true);
loop - тогда все работает нормально. Если я удалю перезагрузку, не выбрав элемент в списке, все будет работать.
Может ли кто-нибудь объяснить, что мне здесь не хватает?
Вам не хватает того, что почти каждая операция, связанная с компонентами Swing, должна выполняться на EDT? – SyntaxT3rr0r