我有一个程序可以将PanelFurniture
个对象添加到ArrayList
。当我尝试将数据保存在文件中时,它给了我异常java.io.NotSerializableException: PanelFurniture$1
。 PanelFurniture
是类的名称,它已经实现了Serializable
,所以我不明白问题可能是什么。
这是我将ArrayList写入文件的代码
if(ae.getSource() == commandButtons[5]) {
int x = 5 , y = 11;
File confidential = new File("secrets.txt");
PrintWriter output = null;
try {
saveFile = new FileOutputStream("myFile.dat");
save = new ObjectOutputStream(saveFile);
save.writeObject(orderList);
save.close();
System.out.println(orderList);
}
catch (Exception e){
e.printStackTrace();
}
}
}
答案 0 :(得分:4)
PanelFurniture$1
指的是一个匿名的内部类,显然没有实现Serializable
。因此,您应该使用transient
限定相应的类成员(或者使其成为局部变量),因为匿名类不应包含可序列化数据。如果你的话,你应该变成一个普通的(命名的)内部类,并让它implement Serializable
。
答案 1 :(得分:1)
查看writeObject()方法的JavaDoc:
抛出:
NotSerializableException - 要序列化的某些对象不实现java.io.Serializable接口。
您确定构成ArrayList的元素是否实现了Serializable
接口?
答案 2 :(得分:1)
您的PanelFurniture
类({1}}的内容需要实现ArrayList
接口,以及任何匿名内部类(如Serializable
),所以Java不知道如何将这些数据读/写到磁盘上。
如果你不想使用序列化,你可能想要做这样的事情...(psuedocode)
PanelFurniture$1
答案 3 :(得分:0)
您的问题与数组列表中包含的子模型有关
对于对象上的每个模型,您都必须添加“可序列化的实现”,并包括自动生成的“ private static final long serialVersionUID”
通过这种方式,您可以保存整个列表而没有任何例外