1

からモデルをシリアライズしたいのですがJTable、残念ながらNotSerializableException. 私のフィールドはすべてSerializableです。どこに問題があるのか​​ わかりません。

public class Sauvegarde extends AbstractAction implements Serializable {

    private static final long serialVersionUID = 1L;
    public DefaultTableModel model;

    public Sauvegarde(String string) {
        super(string);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        sauve_actionPerformed(e);
        System.exit(0);

    }

    public void sauve_actionPerformed(ActionEvent e) {
        this.model = Grille.dfm;
        try {

            // Serialisation
            FileOutputStream fos = new FileOutputStream("sauve.tmp");
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(model);
            oos.close();
        } catch (IOException e1) {
            e1.printStackTrace();
        }
    }
}

そして、これは私が JTable とモデルを作成するクラスです:

    String[] columnTitles = { "A", "B", "C", "D", "E"};
    String[] cellulesVide = { "", "", "", "", ""};
    String[][] rowData = new String[nombreDeLignes][5];

    dfm = new DefaultTableModel(columnTitles,0);


    //table.setCellSelectionEnabled(true);


    for (int i = 0 ; i < nombreDeLignes ; i++)
    {   
        dfm.addRow(cellulesVide);
    }


    table = new JTable(dfm) {
4

2 に答える 2

1

魔法はありません。

オブジェクトの階層内のすべてのクラスとそのフィールドを確認する必要があります。すべてのフィールドとクラスは、シリアライズ可能またはプリミティブである必要があります。

親はシリアル化できない場合がありますが、デフォルトのコンストラクターが必要です。

上記の条件が当てはまる場合、動作するはずです。

于 2013-01-20T18:24:00.203 に答える
0

例外が示すように、直接的または間接的に、シリアライズ可能ではないコンストラクター型の非一時的なデータメンバーをどこかに持っています。それを見つけて一時的なものにするか、排除します。コンストラクターはシリアライズ可能ではありません。

于 2013-01-23T03:03:06.247 に答える