본문 바로가기
오류리포트

[오류리포트] Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because the return value of "service.model.StudentDTO.getCondition()" is null

by ssunooo 2024. 7. 18.

 

 

학생부 프로그램을 만드는 중에 오류가 발생했다.

오류코드를 분석해보니 controller와 DAO 사이에서 발생한 것으로 확인되었다.

 

오류코드

 

먼저 DAO를 살펴보았다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
    public ArrayList<StudentDTO> selectAll(StudentDTO studentDTO) { // 내가 가지고있는 데이터 전부를 넘겨주면됨
        System.out.println("   sevice.model.StudentDAO selectAll() 시작");
        ArrayList<StudentDTO> datas=new ArrayList<StudentDTO>();// 반환할 배열생성
        
        if(studentDTO.getCondition().equals("All")) { // 컨디션의 값이 All이라면
            for(StudentDTO data:this.datas) { // 입력받은 데이터를 배열과 대조해서
                datas.add(data); // 새로운 배열에 추가
            }
            System.out.println("   sevice.model.StudentDAO selectAll() 종료");
        }
        /*
        ArrayList<StudentDTO> datas=new ArrayList<StudentDTO>();
        
        return datas;
        // null이 반환되는 경우는 없다. = 생성자를 만들었으므로(안만들었어도 기본생성자가 있기 때문에)
        // 다만, .size()가 0일수는 있다.
         */
        else if(studentDTO.getCondition().equals("NAME")) { // 컨디션의 값이 NAME이라면
            System.out.println("   sevice.model.StudentDAO selectAll(NAME) 시작");
            
            for(StudentDTO data:this.datas) { // 입력받은 데이터를 배열과 대조해서
                if(data.getName().contains(studentDTO.getName())) { // 입력받은 이름이 데이터의 이름에 포함되어 있으면
                    datas.add(data); // 새로운 배열에 추가
                }
            }
            System.out.println("   sevice.model.StudentDAO selectAll(NAME) 종료");
        }
        return datas;// 배열들 모두 반환
    }
cs

 

그 후 controller를 살펴보았다.


1
2
3
4
5
6
7
8
            else if(action==2) {
                StudentDTO studentDTO=new StudentDTO();
                
                
                ArrayList<StudentDTO> datas=model.selectAll(studentDTO);// 가독성 때문에 변수설정
                view.print05(datas); // 목록을 줘야함
            }
cs

 

확인해보니 condition값을 setter를 안해줘서 생긴 오류였다.

condition값이 없으니까 어떤 조건문도 들어가지 못하여

selectAll 메서드를 사용할 수 없었다.

 

controller에 전체출력을 할수있는 "ALL"값을 set해주니 오류없이 잘 돌아갔다.

 


1
2
3
4
5
6
7
8
    public void start() {
            else if(action==2) {                
                StudentDTO studentDTO=new StudentDTO();
                studentDTO.setCondition("All");
                
                ArrayList<StudentDTO> datas=model.selectAll(studentDTO);// 가독성 때문에 변수설정
                view.print05(datas); // 목록을 줘야함
            }
cs

 

위 코드의 4번째줄에 studentDTO.setCondition("All");  를 추가했다.

 

 

2024.07.18