파일 내용을 JList
구성 요소로로드하고 있습니다. 주 스레드에서로드를 수행하면 모든 내용이 정상적으로 처리됩니다. 내용이로드됩니다. 그러나 스레드를 분리하여 코드를로드하고 목록에서 항목을 선택하고 목록을 다시로드하려고하면 임의의 NullPointer
또는 IndexOutOfBounds
예외가 발생합니다. 스윙 스레드 문제 일 수도 있지만 무엇을 결정할 수는 없습니다.JList setListData 스레딩 문제
@Override
public void onTextLoaded(List<String> textLines) {
view.fileLoaded(model.getCurrentFile());
view.setTextLines(textLines);
view.enableListComponent();
}
그리고보기 업데이트 : I가 스레드를 떠나 시도했습니다
public void setTextLines(List<String> textLines) {
jList.setListData(textLines.toArray());
}
@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
}
컨트롤러가 듣기에 대한 책임 :
이
내 스레드 코드while(true);
루프를 추가하여 응답하지 않으면 모든 것이 정상적으로 작동합니다. 목록에서 항목을 선택하지 않고 새로 고침을하면 모든 항목이 작동합니다.
아무도 내가 여기에없는 것을 설명 할 수 있습니까?
Swing 구성 요소와 관련된 거의 모든 단일 작업이 EDT에서 수행되어야한다는 사실을 알지 못합니까? – SyntaxT3rr0r