每次我尝试编译我的代码时,我都会收到错误,我的类“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)