2012-03-25 73 views
0

我已经做了一个Java类,我已经定义了一个构造函数和一些方法,但我得到一个NullPointer异常,我不知道我该如何修复它。Java NullPointerException在构造函数的类

public class Job { 

    String idJob; 
    int time; 
    int timeRun; 
    Job j1; 

    List<Job> startBeforeStart; 
    List<Job> restricted; 

    Job(String idJob, int time){ 
     this.idJob=idJob; 
     this.time=time; 

    } 


    public boolean isRestricted() { 
     return restricted.size() != 0; 
    } 

    public void startsBeforeStartOf(Job job){ 
      startBeforeStart.add(job); 
      job.restricted.add(this); 
    } 

    public void startsAfterStartOf(Job job){ 
      job.startsBeforeStartOf(this); 
    } 

    public void checkRestrictions(){ 

     if (!isRestricted()){ 
      System.out.println("+\n"); 
      } 
     else{ 
      Iterator<Job> itR = restricted.iterator(); 
      while(itR.hasNext()){ 
       Job j1 = itR.next(); 
       if(time>timeRun){ 
        System.out.println("-\n"); 
        time--; 
       } 
       else { 
        restricted.remove(j1); 
       } 
      } 
     } 
    } 






    @Override 
    public boolean equals(Object obj) { 
     return obj instanceof Job && ((Job) obj).idJob.equals(idJob); 
    } 



    public void run() { 
     timeRun++; 
    } 



} 

PS 展望论坛一个用户说,为了修正这个错误,我应该做的构造函数中一个ArrayList(不修改所接收的参数应保持字符型INT时间),但我不明白他的意思。

+1

请附上错误 – 2012-03-25 11:25:43

+0

这个问题的标题完全是误导。你的构造函数不能抛出NPE – 2012-03-25 11:31:46

+0

*“在论坛中寻找”*在网上?网络是一个很大的地方,小心分享一个链接到这个线程? – 2012-03-25 11:41:02

回答

6

对于列表startBeforeStartrestricted,您都不会创建List<Job>的实例 - 您只能声明一个变量,该变量将分配一个空指针。因此,无论何时你试图访问这个List [例如:return restricted.size() != 0;] - 你试图解引用一个空指针 - 这会导致你的NPE。

您应该创建一个List的实例 - 使用new运算符[可能在构造函数中]。

看看ArrayListLinkedList并选择哪一个更适合你。

例如,如果你要用就用两人都有ArrayList,你c'tor应该是这样的:

Job(String idJob, int time){ 
    this.idJob=idJob; 
    this.time=time; 
    startBeforeStart = new ArrayList<Job>(); 
    restricted= new ArrayList<Job>(); 

} 
+0

谢谢,问题解决了 – AndreaF 2012-03-25 11:47:37