Java SwingWorker 사용했음에도 List 참조 시 NullPointerException 발생
조회수 1312회
Java 1.8에서 Swing으로 비디오 관리 프로그램을 만들어서 버튼을 클릭하면 POI 라이브러리로 엑셀 파일을 읽는 함수를 실행하는데요. 이 작업을 백그라운드 스레드로 실행해서 UI가 얼어버리는 현상을 해결하려고 합니다. 그런데 doInBackground()와 done() 안에 보시면 알겠지만 리스트의 크기를 출력할 때는 문제가 없는데요.
/* JFrame을 상속받아 UI를 그리고, 이벤트를 핸들하는 클래스 */
private List<String[]> videoList;
...
// 버튼 클릭 이벤트 핸들링(MouseAdapter() 익명 클래스 내부)
if (response == JFileChooser.APPROVE_OPTION) {
SwingWorker<List<String[]>, Void> worker = new SwingWorker<List<String[]>, Void>() {
VideoInfo videoInfo = new VideoInfo();
@Override
protected List<String[]> doInBackground() throws Exception {
final List<String[]> list = VideoInfo.readFile(fileChooser.getSelectedFile());
System.out.println(list.size()); // 문제 없음
return list;
}
@Override
protected void done() {
try {
videoList = get(5L, TimeUnit.SECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
}
System.out.println(list.size()); // 문제 없음
}
};
worker.execute();
for (int i = 0; i <videoList.size(); i++) { // NullPonterException
...
}
}
/* 엑셀 파일을 읽는 또 다른 VideoInfo 클래스 */
...
public List<String[]> readFile(File file) { ... }
...
SwingWorker의 작업이 끝나고 리스트를 사용하려면 NullPointerException이 발생하는 이유를 모르겠습니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력