简体   繁体   中英

java.io.NotSerializableException Error in ObjectInputStream

I am trying to save obj in files but java.io.NotSerializableException error doesnt allow me to do it. This is my code:

import Estrategia.Gestor_nivel;
import Resources.Exceptions.DuplicateLevelsId;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import pp_epoca_normal.Gerir_jogo;


public class Teste {


public void guardar_ficheiro(Object obt) {
    Gerir_jogo teste = (Gerir_jogo) obt;
    System.out.println("sad----  " + teste);
    Gestor_nivel sad;
    try {
        ObjectOutputStream objOut = new ObjectOutputStream(new FileOutputStream("teste.dat"));
        ObjectOutputStream objOut1 = new ObjectOutputStream(new FileOutputStream("teste1.dat"));
        objOut.writeObject(teste);
        objOut1.writeObject(teste.getObjetos());
        sad = (Gestor_nivel) teste.getLevel(0);


        objOut.close();
    } catch (Exception e) {
        e.printStackTrace();
    }

}

public void ler_ficheiro() throws FileNotFoundException, IOException, ClassNotFoundException, DuplicateLevelsId {
    Gerir_jogo asd;
    ObjectInputStream mySecondStream = new ObjectInputStream(new FileInputStream("teste.dat"));
    ObjectInputStream mySecondStream1 = new ObjectInputStream(new FileInputStream("teste1.dat"));

    asd = (Gerir_jogo) mySecondStream.readObject();
    asd.setObjetos((Object[]) mySecondStream1.readObject());

    System.out.println("leu--");
    mySecondStream.close();
    mySecondStream1.close();

}
}

Class gerir jogo

import Container.Contentor;
import Estrategia.Gestor_nivel;
import Resources.Exceptions.DuplicateLevelsId;
import Resources.GameContainerContract;
import Resources.GameLevelContract;

public class Gerir_jogo extends Contentor implements GameContainerContract {
private String nome_jogo;
private boolean mode_jogo_depuracao;

public Gerir_jogo(String nome_jogo, boolean mode_jogo) {
    this.nome_jogo = nome_jogo;
    this.mode_jogo_depuracao = mode_jogo;
}


@Override
public boolean addNewLevel(GameLevelContract glc) throws DuplicateLevelsId {
    Gestor_nivel a;
    boolean asd = false;
    for (Object objetos : this.getObjetos()) {
        a = (Gestor_nivel) objetos;
        if(objetos != null)
        if (a.getId() == glc.getId()) {
            asd = true;
        }
    }
    if (asd == false)
        return super.addObject(glc);
    return false;
}

@Override
public boolean removeLevel(GameLevelContract glc) {
    return super.Encontrar_objeto(super.removeObject(super.findObject(glc)));
}

@Override
public GameLevelContract getLevel(int i) {
    return (GameLevelContract) super.getObject(i);
}

@Override
public int getSize() {
    return super.getCont();
}

@Override
public boolean getDebugMode() {
    return this.mode_jogo_depuracao;
}

@Override
public void setDebugMode(boolean bln) {
    this.mode_jogo_depuracao = bln;
}

@Override
public void setName(String string) {
    this.nome_jogo = string;
}

@Override
public String getName() {
    return this.nome_jogo;
}

Can someone help me please? I really need to put this saving and reading files and what is inside them

Error:

java.io.NotSerializableException: pp_epoca_normal.Gerir_jogo
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
at Gravar_ler_ficheiro.Teste.guardar_ficheiro(Teste.java:34)
at pp_epoca_normal.PP_epoca_normal.main(PP_epoca_normal.java:77)

I really dont know what to do

Your class Gerir_jogo must implements the interface Serializable . Please, take a look at this tutorial .

Edit 1

Your class does not implements it, so, change if for:

import java.io.Serializable;
public class Gerir_jogo extends Contentor implements GameContainerContract, Serializable {

Implement Serializable on Gerir_jogo class. Change class declaration as:

import java.io.Serializable;
public class Gerir_jogo extends Contentor implements GameContainerContract, Serializable {

To serialize java object means to stream the byte information as non-static states of the object to external file. Here the class must be implemented by the interface "Serilizable".

Here I have replied with a code, which copies the States as id, name & sal of the class "Employee" to an external file present at the destination "D:\\Object\\States.txt". Here its not readable.

import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

public class Employee implements Serializable {

    int id;
    String name;
    double sal;



    public Employee(int id, String name, double sal) {
        super();
        this.id = id;
        this.name = name;
        this.sal = sal;
    }


    public String toString() {
        return "Employee [id=" + id + ", name=" + name + ", sal=" + sal + "]";
    }


    public static void main(String[] args) throws Exception {
        Employee e1 = new Employee(101, "Mr. S.V. Roshan", 45000.0D);

        FileOutputStream fout = new FileOutputStream("D:/Object/State.txt");
        ObjectOutputStream out = new ObjectOutputStream(fout);
        out.writeObject(e1);
        out.flush();
        out.close();
        fout.flush();
        fout.close();
        System.out.println("Object serialized successfully!");


    }

}

I think, It may help you..!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM