2013-07-16 33 views
-1

我试图序列与ObjectOutputStream中和FileOutputStream中的对象序列化对象,但与类名的错误被显示。用java

JFileChooser fc = new JFileChooser(); 
NewClientClass AddClient = new NewClientClass(IDNumber.getText(), FirstName.getText(), LastName.getText(), Address.getText(), DateOfBirth.getText(), Profession.getText()); 
     try { 
     int returnVal = fc.showSaveDialog(null); 
     if (returnVal == JFileChooser.APPROVE_OPTION) { 
      ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(fc.getSelectedFile().getAbsoluteFile())); 
      out.writeObject(AddClient); //the application crashes. 
      out.close(); 
      JOptionPane.showMessageDialog(null, "Successfully Saved"); 
     } 

正如你所看到的,我声明了一个新的客户端并从文本框中获取数据。数据存储正确,因为我检查了tru调试,唯一的问题是将对象写入文件。

请帮忙吗?

感谢

+0

是否你的对象实现java.io.Serializable?请发布错误消息。 – Burkhard

+0

你得到了什么错误(堆栈跟踪)? – MaVRoSCy

+0

@MaVRoSCy在代码中检查评论 –

回答

1

如果没有进一步的细节,最有可能的罪魁祸首是来自NewClientClass缺乏Serializable接口的实现的:

类的串行化是通过实现 的Java类的功能。 io.Serializable接口。没有实现这个接口的类将没有任何状态序列化或反序列化。 可序列化类的所有子类本身都是可序列化的。该 序列化接口没有方法或字段,仅用于 确定的可序列化的语义。

编辑:

假设您有类似这样:

public class NewClientClass 
{ 
    public NewClientClass (String idNumber, String firstName, String lastName, String address, String dateOfBirth, String profession) 
    { 
     ... 
    } 

} 

你只需要使它像这样:

public class NewClientClass implements Serializable 
{ 
    public NewClientClass (String idNumber, String firstName, String lastName, String address, String dateOfBirth, String profession) 
    { 
     ... 
    } 
} 

这应该是所有你需要做(不要忘记导入包含该接口的软件包)。 Serializable界面将标记你的班级seriliazation。

再一次,你没有提到你得到了什么异常,所以这是纯粹的推测。

+0

在哪里我在NewClientClass编辑吗? –

+0

@NeilGambin:我已经修改我的答案。我希望它能解决你的问题。 – npinti