Сериализация создает исключение Класс WriteAbortedException не сериализуем - PullRequest
1 голос
/ 22 апреля 2019

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