当我用带参数调用构造函数时,NullPointerException

时间:2014-03-21 20:33:46

标签: java

首先,对我可怜的英语真的很抱歉。 我想制作一份电影清单。 在主类中,我调用了insert()方法,并在其中创建了一个MovieListNode类的对象,以便执行所需的操作。

class main{...
   while( FileParsers.hasNextMovie() ){
        MovieData movie = FileParsers.getNextMovie();
        System.out.println( movie );
        /* fill the movie lists here */
        UnsortedMovieList vag=new UnsortedMovieList();
        vag.insert(movie);
}

unsortedmovielist的插入方法:

class UnsortedMovieList{...
 public void insert(MovieData data){

    MovieListNode node=new MovieListNode(data.getId(),data.getTitle(),data.getYear(),data.getRating(),data.getVotes(),data.getDuration(),data.getGenres());

    if(isEmpty()){
            tail=node;
    }else{
        head.setPrevious(node);
    }
    node.setNext(head);
    head=node;
    size++;

}

和MovieListNode类(对不起大小):

public class MovieListNode {

private int id;
private String title;
private int year;
private double rating;
private int votes;
private int duration;
private ArrayList<genre_t> genres;
private int i=0;

private MovieListNode previous;
private MovieListNode next;

public MovieListNode(){}

public MovieListNode(int id, String title, int year, double rating, int votes, int duration, ArrayList<genre_t> genres) {
    this.id=id;
    this.title=title;
    this.year=year;
    this.rating=rating;
    this.votes=votes;
    this.duration=duration;
    this.genres=genres;
}

public int getId() {return id;}
public String getTitle() {return title;}
public int getYear() {return year;}
public double getRating() {return rating;}
public int getVotes() {return votes;}
public int getDuration() {return duration;}
public ArrayList<genre_t> getGenres() {return genres;}
public MovieListNode getPrevious() {return previous;}
public MovieListNode getNext() {return next;}

public void setNext(MovieListNode next) {this.next=next;}
public void setPrevious(MovieListNode previous) {this.previous=previous;}

}

当我这样做时,我会在行NullPointerException中获得MovieListNode node=new MovieListNode(data.getId(),data.getTitle(),data.getYear(),data.getRating(),data.getVotes(),data.getDuration(),data.getGenres())。相反,如果我写'MovielistNode node=new MovielistNode();'我不会得到任何错误,但这不是我想要的。 如果有人可以帮助我会很感激。谢谢。 (如果你想了解我代码中有关某些内容的更多信息,请告诉我们)

1 个答案:

答案 0 :(得分:0)

MovieData对象中的一个或所有字段为空。您需要调查您的方法:

FileParsers.getNextMovie();

使用此方法初始化类型为MovieData的对象如果此方法未使用初始化所有数据字段的构造函数声明并初始化MoveData对象,然后返回该对象,当您尝试拨打NullPointer

之一时,您会收到getters

可能是genres,因为其他字段都有默认初始化。

<强>更新

Fileparsers课程中。我注意到getNextMovie()方法中的代码:

if( dataLine==null || genresLine==null ) 
  return null; 
}

可能是readLine()的逻辑没有被正确使用。所以我怀疑你可能会以空行结束,因此返回一个null MovieData对象。在分配之前,您应该检查下一行是否为空。