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を実装する必要があるため、Java はこのデータをディスクに読み書きする方法を知りません。SerializablePanelFurniture$1

シリアル化を使用したくない場合は、おそらく次のようなことをしたいでしょう... (疑似コード)

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 に答える