我正在尝试使用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调试时,数据存储正确,唯一的问题是将对象写入文件时。
请帮忙吗?
由于
答案 0 :(得分: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
界面将标记您的班级以进行血清化。
同样,你没有提到你得到的例外,所以这纯粹是推测性的。