Java 使用参数调用构造函数时出现NullPointerException

Java 使用参数调用构造函数时出现NullPointerException,java,Java,首先,真的很抱歉我的英语很差。 我想列一张电影的清单。 在main类中,我调用insert()方法,并在其中创建MovieListNode类的对象,以便执行所需的操作 class main{... while( FileParsers.hasNextMovie() ){ MovieData movie = FileParsers.getNextMovie(); System.out.println( movie ); /* fill the

首先,真的很抱歉我的英语很差。 我想列一张电影的清单。 在main类中,我调用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类(对于大小,很抱歉):

公共类MovieListNode{
私有int-id;
私有字符串标题;
私人国际年;
私人双重评级;
私人投票;
私有整数持续时间;
私人阵列主义流派;
私有整数i=0;
私人电影公司;
私有MovieListNode下一步;
公共MovieListNode(){}
公共MovieListNode(整数id、字符串标题、整数年、双重评级、整数投票、整数持续时间、数组列表类型){
这个.id=id;
这个.title=title;
今年=年;
这个。评级=评级;
这.投票=投票;
这个。持续时间=持续时间;
这个。流派=流派;
}
public int getId(){return id;}
公共字符串getTitle(){return title;}
public int getYear(){return year;}
public double getRating(){return rating;}
public int getvoces(){return voces;}
public int getDuration(){return duration;}
public ArrayList 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;}
}

当我这样做的时候,我在第
MovieListNode=newMovieListNode(data.getId(),data.getTitle(),data.getYear(),data.getRating(),data.getVotes(),data.getDuration(),data.getGenres())行中得到
NullPointerException
。如果我写
“MovieListNode=new MovieListNode();”我没有得到任何错误,但这不是我想要的。

如果有人能帮忙,我将不胜感激。谢谢(如果您想了解有关我的代码中某些内容的更多信息,请告诉我)

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

FileParsers.getNextMovie();
使用此方法初始化类型为
MovieData
的对象,如果此方法未使用初始化所有数据字段的构造函数声明和初始化
MoveData
对象,然后返回该对象,则当您尝试调用其中一个
getter

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

更新:

在您的
文件解析器
类中。我注意到
getNextMovie()
方法中的代码:

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

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

您确定
数据
不为空吗?也许解析会返回一个空的MovieData对象?在我看来,您还应该放置
UnsortedMovieList vag=new UnsortedMovieList()在while循环之前。在
main
输出中,
System.out.println(movie)
有什么作用?同意-MovieData对象必须为空。在调用UnsortedMoveList之前,应该进行更多检查。您的kitchen sink MovieListNode调用以及作为方法调用传递的所有参数都不太智能。非常感谢您的直接回答。根据你说的,我已经很好地定义了MovieData类。。。如果你能看一下,那有什么问题吗?@user3448027我认为问题不在那里。我想这是在你的静态
FileParsers.getNextMovie()
方法中这是FileParsers类,这是给我们的,我不知道如何更改其中的某些内容,但是根据你说的,它似乎还可以。
if( dataLine==null || genresLine==null ) 
  return null; 
}