【问题标题】:Serializing object with java [closed]用java序列化对象[关闭]
【发布时间】:2013-07-14 14:07:30
【问题描述】:

我正在尝试使用 ObjectOutputStream 和 FileOutputStream 序列化对象,但是显示类名错误。

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 调试时,数据存储正确,唯一的问题是在将对象写入文件时。

有什么帮助吗?

谢谢

【问题讨论】:

  • 您的对象是否实现了 java.io.Serializable?请发布错误消息。
  • 你得到什么错误(Stacktrace)?
  • @MaVRoSCy 检查代码中的 cmets
  • @Burkhard 不使用该导入
  • 什么“正在显示类名错误”?

标签: java serialization fileoutputstream objectoutputstream


【解决方案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 接口将标记你的类进行序列化。

同样,你没有提到你得到了什么异常,所以这纯粹是推测。

【讨论】:

  • 我必须在 NewClientClass 中哪里进行编辑?
  • @NeilGambin:我已经修改了我的答案。我希望它能解决你的问题。
猜你喜欢
  • 1970-01-01
  • 2021-03-26
  • 2014-07-24
  • 1970-01-01
  • 1970-01-01
  • 2018-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多