2014-01-07 31 views
-1

有人向我解释为什么我得到一个空指针异常?在java中可观察为空

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发生在这里。我制作了一个管理学生名单的程序。我可以添加/删除学生。 每个之后加上我打电话

setChanged(); 
notifyObservers(this); 

在这里,我想这observer1显示了平均品位> 5 observer2的studens平均< 5. 我得到一个空指针异常显示的那些这里:obs1.update(observable, str1); 我必须说我试图打印str1str2并且它们包含学生名单。所以我的猜测是,问题是在observable

+1

你在哪里给'obs1'和'obs2'赋值? NPE似乎是无效的。 –

+0

将'final'修饰符添加到变量中,并且永远不必询问一些问题。 –

回答

2

我没有看到你指定的值obs1obs2任何地方。当一个变量没有赋值时,它是“null”。

+0

我为这些值分配了什么,以便它不会影响到以后?某种初始化,但有什么? – user3043278

+0

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

+0

我已经解决了这个问题。谢谢您的帮助。 – user3043278