序列化和反序列化List <string []> JTable

时间:2016-04-24 17:15:08

标签: java arrays serialization jtable deserialization

我正在尝试在一个名为Ex的类中从JTable序列化和反序列化数据,我得到了一个与Jtable和DefaultTableModel相关的行为,我不明白。 我使用List<String[]>作为数据容器,我不知道如何反序列化。

public class Ex implements Serializable {
static List<String> S1 = new ArrayList<String>();
static List<String[]> Z1 = new ArrayList<String[]>();
...
Ex
{
for (int i = 0; i < 1; i++) {Z1.add(new String[] {(i+1)+"",((i+1)*10)+"",((i+1)*100)+""});}
data = new DefaultTableModel(Z1.toArray(new Object[][] {}), S1.toArray());
tab = new JTable(data);
...
}
}

使用按钮调用的序列化和反序列化方法如下所示

public void Serializer(Ex caller)
{
    try {
    FileOutputStream fs = new FileOutputStream("Ser.ser");
    ObjectOutputStream os = new ObjectOutputStream(fs);
    os.writeObject(caller);
    os.flush();
    os.close();
    } catch (Exception e) {e.printStackTrace(); }
}

public void Deserializer()
{
    Ex J = null;
    try {
    FileInputStream fis = new FileInputStream("Ser.ser");
    ObjectInputStream ois = new ObjectInputStream(fis);
    J = (Ex) ois.readObject();
    ois.close();
    } catch (Exception e) { e.printStackTrace(); }
    DefaultTableModel data2 = new DefaultTableModel(J.Z1.toArray(new Object[][] {}), J.S1.toArray());
    tab.setModel(data2);
}

MyTableListener看起来像这样:

public class MyTableListener implements TableModelListener
{
    Ex x;
    MyTableListener(Ex E) {x=E;}
    public void tableChanged(TableModelEvent e)
    {   int row = e.getLastRow();
        int col = e.getColumn();
        String[] rowBuffer = x.Z1.get(row);
        rowBuffer[col]=(String)x.data.getValueAt(row,col);
    }
}

并在主要方法中:

...
Ex THIS = new Ex();
Tlistener = new MyTableListener(THIS);
data.addTableModelListener(Tlistener);
...

有人可以指定如何正确反序列化List<String[]>吗?

1 个答案:

答案 0 :(得分:0)

解决: 静态字段不会被序列化。