0

我有一个将PanelFurniture对象添加到ArrayList. 当我尝试将数据保存在文件中时,它给了我异常java.io.NotSerializableException: PanelFurniture$1PanelFurniture是类的名称,它已经实现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();
        }
    }
}
4

4 回答 4

4

PanelFurniture$1指的是一个匿名内部类,它显然没有实现Serializable. 因此,您应该使用(或将其设为局部变量)来限定相应的类成员transient,因为匿名类不应该包含可序列化的数据。如果你这样做了,你应该变成一个普通的(命名的)内部类并拥有它implement Serializable

于 2012-04-16T13:52:42.320 回答
2

您的PanelFurniture类,即您的内容ArrayList,需要实现Serializable接口以及任何匿名内部类(如PanelFurniture$1),因此 Java 不知道如何将这些数据读/写到磁盘。

如果你不想使用序列化,你可能想做这样的事情......(伪代码)

Create a FileOutputStream
for (each item in the ArrayList){
  get the properties of the PanelFurniture object, and write them to the FileOutputStream.
  eg. fos.writeLine(panelFurniture.getName() + "," + panelFurniture.getValue());
  }
Close the FileOutputStream.
于 2012-04-16T13:56:14.270 回答
1

查看writeObject()方法的 JavaDoc:

抛出:

NotSerializableException - 某些要序列化的对象未实现 java.io.Serializable 接口。

您确定构成 ArrayList 的元素实现了Serializable接口吗?

于 2012-04-16T13:54:13.240 回答
0

您的问题与您的数组列表中包含的子模型相关联

对于对象上的每个模型,您必须添加“实现可序列化”并包含自动生成的“私有静态最终长序列版本UID”

通过这种方式,您可以毫无例外地保存整个列表

于 2018-08-14T11:00:46.300 回答