Java:从文件中使用ObjectInputStream读取队列对象会产生nullPointerException

Java:从文件中使用ObjectInputStream读取队列对象会产生nullPointerException,java,Java,我有一个存储队列内容的QStorage类 class QStorage{ Queue<A> q = new PriorityQueue<A>(5); public Queue<a> readQ(){ try{ FileInputStream fin = new FileInputStream("/home/requestQ.ser"); ObjectInputStream ois = new ObjectInputStream(f

我有一个存储队列内容的QStorage类

class QStorage{
   Queue<A> q = new PriorityQueue<A>(5);

  public Queue<a> readQ(){
   try{
   FileInputStream fin = new FileInputStream("/home/requestQ.ser");
   ObjectInputStream ois = new ObjectInputStream(fin);
   q = (Queue)ois.readObject();
   }catch(Exception e){}

   return q;
  }
}
类QStorage{
队列q=新的优先级队列(5);
公共队列readQ(){
试一试{
FileInputStream fin=newfileinputstream(“/home/requestQ.ser”);
ObjectInputStream ois=新ObjectInputStream(fin);
q=(队列)ois.readObject();
}捕获(例外e){}
返回q;
}
}
在另一个类中,我调用上述类的readQ()方法来存储队列内容 将文件发送到另一个队列

class MyQ{
  public static void main(String args[]){
    QueueStorage qs = new QueueStorage(); 
    Queue<A> myQ = new PriorityQueue<A>(5);
    myQ = qs.readQ();
    //...some other stuffs goes here 
 }
}
类MyQ{
公共静态void main(字符串参数[]){
QueueStorage qs=新的QueueStorage();
队列myQ=新的优先级队列(5);
myQ=qs.readQ();
//…还有其他东西在这里
}
}
这里,如果队列的某些条目已经存储在文件中,readQ()将正确返回这些条目。但是如果文件中没有存储条目(我的意思是存储空队列) 然后这个方法给出了nullPointerException,我的程序停止工作

注意:我有一个要求,我应该检查存储的内容,而不知道是否 它是否是空的


请帮忙。谢谢

NPE是由您忽略文件为空时抛出的EOFEException的可怕做法造成的,实际上所有IOException、ClassNotFoundException、RuntimeException等都不会这样做。要么:

  • 将readQ()方法声明为抛出IOException等,并将对它的调用放入try/catch块,或
  • 让它像现在一样捕获自己的异常,像现在一样在异常上返回null(不要忘记g记录异常,这样您就知道发生了什么),但是在调用它之后测试null
  • 目前你只是盲目地认为这种方法会成功。不会的


    注意:如果文件为空,并不意味着“存储了空队列”。这意味着您在向文件中写入任何内容时发生了灾难性的失败,根据此处展示的实践,您无疑也忽略了这一点

    你忘了实现可序列化的
    Serializable
    好吧,我已经实现了可序列化的
    Serializable
    ,忘了在这里显示。仍然收到相同的错误。如果问题是NPE(如果文件为空),请捕获它并返回一个
    null
    对象。@alfasin:如果有一些存储的条目,请查看我的程序是否正常运行。只有在没有存储项时才会出现问题。@alfasin:Ya我忘了在异常时
    返回null
    。现在开始工作了。非常感谢。噢..我忘了在异常时
    返回null
    。非常感谢@EJP的建议。现在开始工作了。