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이 발생하는 이유를 모르겠습니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)