ファイルの内容を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);
ループを追加することでハングアップ - すべて正常に動作します。リスト内の項目を選択せずにリロードした場合、すべてが機能します。
私はここで何が欠けているのか誰に説明できますか?
Swingコンポーネントに関連するほとんどすべての操作がEDT上で行われなければならないことがありますか? – SyntaxT3rr0r