将ArrayList保存到文本文件时出现NotSerializableException

时间:2012-04-16 13:50:32

标签: java exception serialization

我有一个程序可以将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 个答案:

答案 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”

通过这种方式,您可以保存整个列表而没有任何例外