Каждый раз, когда я пытаюсь скомпилировать свой код, я получаю сообщение об ошибке, что мой класс "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)