0

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

3
  • Please provide the error stacktrace and source code of Gerir_jogo class Commented May 30, 2017 at 16:34
  • i already put the class Commented May 30, 2017 at 16:45
  • MiguelSouza, check my answer, your class is not implementing the Serializable interface, change it to implement it. There's no problem to a class implement more than one interface, it's allowed. Commented May 30, 2017 at 16:52

3 Answers 3

1

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 {
Sign up to request clarification or add additional context in comments.

1 Comment

A class can implement two interfaces!
0

Implement Serializable on Gerir_jogo class. Change class declaration as:

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

1 Comment

Already answered by Bruno
0

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..!

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.