1

每次我尝试编译我的代码时,我都会收到错误,我的类“Score”不可序列化:

java.io.WriteAbortedException: writing aborted;
java.io.NotSerializableException: Score

我尝试序列化一个对象,该对象主要包含原始数据类型,但一个属性再次是同一类的对象。

import java.io.Serializable;

public class Score implements Serializable{
  private static final long serialVersionUID = 1L;
  private String studienElement;
  private String subject;
  private float score;
  private int attempts;
  private int[] weight;
  private Score subScore;

我不确定这是否是问题所在。当我序列化时,我尝试序列化一个像这样构建的 HashMap

HashMap<String, Score>

显然问题应该在Score的某个地方。

编写过程在这段代码中

public static void writeSyllabus(HashMap<String, Score> syllabusMap){
    File syllabusFile = null;
    ObjectOutputStream oos = null;
    try{
      syllabusFile = new File(syllabusPath);
      oos = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(syllabusFile)));
      oos.writeObject(syllabusMap);
    }catch(IOException e){
      e.printStackTrace();
    }finally{
      if(oos != null){
        try{
          oos.close();
        }catch(IOException e){
          e.printStackTrace();
        }
      }
    }
  }

全栈跟踪:

java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: Score
    at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1598)
    at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:430)
    at java.base/java.util.HashMap.readObject(HashMap.java:1460)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at java.base/java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1160)
    at java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2216)
    at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2087)
    at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1594)
    at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:430)
    at DataHandler.getSyllabus(DataHandler.java:97)
    at Tester.main(Tester.java:11)
Caused by: java.io.NotSerializableException: Score
    at java.base/java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1185)
    at java.base/java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:349)
    at java.base/java.util.HashMap.internalWriteEntries(HashMap.java:1840)
    at java.base/java.util.HashMap.writeObject(HashMap.java:1411)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at java.base/java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:1130)
    at java.base/java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1497)
    at java.base/java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1433)
    at java.base/java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1179)
    at java.base/java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:349)
    at DataHandler.writeSyllabus(DataHandler.java:33)
    at Syllabus.createSyllabus(Syllabus.java:183)
    at Tester.main(Tester.java:23)
Exception in thread "main" java.lang.NullPointerException
    at Tester.main(Tester.java:12)
4

0 回答 0