2016-07-12 12 views
0

私はJtableのDataVectorをcilateするserilizeファイルを持っています。それをデシリアライズしたいときは、VectorをデフォルトのtableModelにキャストできないというエラーがスローされます。ここでVector to DefaulTableModel

Serializeメソッド:ここ

fileOut.writeObject(model2.getDataVector()); //I save just the Data Vector. 

、デシリアライゼーション・プロセス:

ObjectInputStream in = new ObjectInputStream(new FileInputStream("C:/Users/Harry/Desktop/clients.txt")); 
     DefaultTableModel dtm = (DefaultTableModel)in.readObject(); 
     JTable table = new JTable(dtm); 

エラー:デシリアライズすることができますし、テーブルモデルをデフォルトにベクターからキャストする方法

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.util.Vector cannot be cast to javax.swing.table.DefaultTableModel 

私のJtableに戻ってデータベクトル?大まかに次の3つの選択肢があり話す

答えて

0

  1. は全体DefaultTableModelをシリアル化。これは短命のアプリケーションでは問題ありませんが、データを長期間保存するための一貫したメカニズムとしては使用しないでください。
  2. データのVectorを列の数と列の名前とともにシリアル化します。このデータをリーダ側で逆シリアル化し、DefaultTableModel(Vector, Vector)コンストラクタを使用して新しいDefaultTableModelを構築します。デシリアライズ時にすでに列名を認識している場合は、このデータをワイヤを介して渡す必要はありません。
  3. TableModelを実装します。これは、Serializableデータ項目の基になるList<T>をラップします。これは私の好みの選択です。
+0

私はdataVectorをシリアライズし、3つの選択肢から戻ってきました。第2のものは適切ですが、どうすればベクトルからdefaultTableModelに戻すことができますか? – Cohen

+0

新しいDefaultTableModelを構築して、Vectorを渡す必要があります。 – Adamski

+0

DefaultTableModel(ベクトルv)dtm =新しいDefaultTableModel(ベクトルv); ? – Cohen