2014-01-07 8 views
-1

Ca 누군가가 왜 널 포인터 예외가 발생하는지 설명해 주시겠습니까? Java에서 관찰 가능 null

private Observer obs1; 
private Observer obs2; 
public void notifyObservers(Observable observable) { 
     String str1 = "Observer 1 :\n"; 
     String str2 = "Observer 2 :\n"; 

     try { 
      Student[] studList = returnStudents(); 
      for (int i=0;i<returnStudents().length;i++) { 
       if(studList[i].computeAverage() >= 5) 
        str1 = str1 + studList[i].toString() + "\n"; 
       else 
        str2 = str2 + studList[i].toString() + "\n"; 

      } 
     } catch (MyException ex) { 
      System.out.println(ex.getMessage()); 
     } 
     obs1.update(observable, str1); 
     obs2.update(observable, str2); 
    } 

그리고 내 옵저버 클래스 :

public class Watcher implements Observer { 

    public void update(Observable arg0, Object arg1) { 
     System.out.println("The list of students has changed"); 
     System.out.println(arg1); 

    } 

} 

좀 wwhat 여기에 무슨 일이 일어나고 설명합니다. 학생 목록을 관리하는 프로그램을 만들었습니다. 학생을 추가/삭제할 수 있습니다. 각 후 내가 observer1 평균 < 5 내가 널 포인터 예외가 받고 있어요와 사람을 보여 학년> 5 observer2의 평균과 studens을 보여주고 있음을 원하는 여기

setChanged(); 
notifyObservers(this); 

를 호출 추가 여기 : obs1.update(observable, str1); 나는 str1str2을 인쇄하려했는데 학생들의 목록이 포함되어 있다고 말해야 만합니다. 그래서 내 생각 엔 문제가있는 것입니다. observable

+1

여기서 'obs1'과'obs2'에 값을 할당하고 있습니까? 그것들은 널 NPE처럼 보입니다. –

+0

변수에 'final'한정자를 추가하면 몇 가지 질문을하지 않아도됩니다. –

답변

2

obs1 또는 obs2에 값을 할당하는 것을 볼 수 없습니다. 변수에 값이 지정되지 않으면 "null"입니다.

+0

나중에 영향을주지 않도록이 값에 어떤 값을 할당할까요? 어떤 종류의 초기화가 있지만 어떤 것? – user3043278

+0

'obs1 = new Watcher()''obs2 = new Watcher()' –

+0

나는이 문제를 해결했다. 도와 주셔서 감사합니다. – user3043278