Всегда появляется исключение NotSerializableException (Java) - Сериализация не будет работать - PullRequest
0 голосов
/ 01 января 2012

Учитывая следующий код:

import java.io.*;

public class Main {


     public static void main(String argv[]) throws IOException 
      {

         View view = null;

          try
          {
              /* Open the file that is the first command line parameter
                 text file must be inside the project library , not in the src library */

              FileInputStream fstream = new FileInputStream("input.txt");                             
              DataInputStream in = new DataInputStream(fstream);
              BufferedReader groupsFile = new BufferedReader(new InputStreamReader(in));            

              view = new View();
              view.insertTeamsFromFile(groupsFile);
              view.startCompetition();                
              in.close();
          }  

          //Catch exception if any
          catch (Exception e)    {    System.err.println("Error: " + e.getMessage());     }


        try 
        {

            String filename = "view.txt";
            FileOutputStream fos = new FileOutputStream(filename);
            ObjectOutputStream out = new ObjectOutputStream(fos);
            out.writeObject(view);
            out.close();
            System.out.println("Object Persisted");
        } 

        catch (IOException  e) 
        {
            e.printStackTrace();
        }

      }
}

Когда я добираюсь до строки out.writeObject(view);, появляется NotSerializableException. Объект View включает в себя несколько других объектов, и я считываю ввод из файла в этом коде.Предположим, что объект View создается просто отлично, в чем может быть проблема?

View class : 

    public class View implements Serializable {
import java.io.*;
import java.util.*;


         /* Constructor */


        private Controller controller;

        public View() 

        {
            controller = new Controller();
        }

            ... ... 
            // more code 

    }

Точное сообщение:

java.io.NotSerializableException: core.Controller
    at java.io.ObjectOutputStream.writeObject0(Unknown Source)
    at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
    at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
    at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
    at java.io.ObjectOutputStream.writeObject0(Unknown Source)
    at java.io.ObjectOutputStream.writeObject(Unknown Source)

Что здесь не так?

С уважением, Рон

Ответы [ 2 ]

1 голос
/ 01 января 2012

Сообщение об исключении совершенно ясно: класс core.Controller не сериализуем.Сделайте так, чтобы он реализовал Serializable, или объявите его как transient, если он не должен быть сериализован.

1 голос
/ 01 января 2012

Реализует ли Controller Serializable? Все поля View и Controller должны объявить, что они сериализуемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...