【发布时间】:2010-12-28 15:27:07
【问题描述】:
我正在将文件内容加载到JList 组件。如果我在主线程中进行加载,一切似乎都很好 - 内容已加载。但是当我将加载代码移动到单独的线程,选择列表中的一个项目并尝试重新加载列表时,我得到随机的NullPointer 或IndexOutOfBounds 异常。我确定这是某种 Swing 线程问题,但无法确定是什么问题。
这是我的线程代码:
@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负责监听:
@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 上完成?
标签: java multithreading swing jlist