2017-05-30 34 views
0

我想保存文件中的obj,但java.io.NotSerializableException错误不允许我这样做。 这是我的代码:在ObjectInputStream中的java.io.NotSerializableException错误

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(); 

} 
} 

类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; 
} 

有人能帮助我吗? 我真的需要把这个保存和读取文件,里面是什么他们

错误:

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) 

我真的不知道该怎么办

+0

请提供Gerir_jogo类的错误stacktrace和源代码 –

+0

我已经把类 –

+0

MiguelSouza,检查我的答案,你的类没有实现Serializable接口,改变它来实现它。一个类实现多个接口没有问题,这是允许的。 – BrunoDM

回答

1

你的类Gerir_jogo必须实现接口Serializable。请看看tutorial

编辑1

你的类没有实现,所以,改变如果:

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

但该类已经实现了一个接口 –

+1

一个类可以实现两个接口! – BrunoDM

0

落实Gerir_jogo类Serializable接口。 更改类声明为:

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

要序列的Java对象是指以流的字节的信息作为对象,以外部文件的非静态的状态。在这里,这个类必须通过“Serilizable”接口来实现。

在这里,我回复了一个代码,该代码将状态复制为ID为“Employee”类的& sal到存在于目标“D:\ Object \ States.txt”的外部文件。这里它不可读。

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!"); 


    } 

} 

我想,它可能会帮助你..!

相关问题