Java 使用ObjectOutputStream和ObjectInputStream从JTable打开/保存数据

Java 使用ObjectOutputStream和ObjectInputStream从JTable打开/保存数据,java,swing,jtable,objectinputstream,objectoutputstream,Java,Swing,Jtable,Objectinputstream,Objectoutputstream,我有一个电话簿应用程序,它将数据从JTable存储到arraylist中。 在GUI中,我有“保存”和“打开”按钮,它们假设将数据作为文件对象保存和打开。 我已经创建了一个包含arraylist中信息的文件 更新:怎么不能让它将信息加载回JTable 我是Java新手,我将感谢您的耐心和帮助。谢谢 代码如下: 在模型类中(扩展AbstractTableModel) 在GUI中 private void saveActionPerformed(java.awt.event.ActionEve

我有一个电话簿应用程序,它将数据从JTable存储到arraylist中。 在GUI中,我有“保存”和“打开”按钮,它们假设将数据作为文件对象保存和打开。 我已经创建了一个包含arraylist中信息的文件

更新:怎么不能让它将信息加载回JTable

我是Java新手,我将感谢您的耐心和帮助。谢谢

代码如下:

模型类中(扩展AbstractTableModel)

GUI中

   private void saveActionPerformed(java.awt.event.ActionEvent evt) {                                     
    try {
        model.saveContact();
    } catch (IOException ex) {
        Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex);
    }
}   

    private void openActionPerformed(java.awt.event.ActionEvent evt) {                                     
    final JFileChooser fc = new JFileChooser();
    if (evt.getSource() == open) {
    int returnVal = fc.showOpenDialog(GUI.this);
    if (returnVal == JFileChooser.APPROVE_OPTION) {
       try {
        model.loadContact();
    } catch (IOException ex) {
        Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex);}
    } 
    }     
}        
更新:

public void loadContact() throws IOException {
            ObjectInputStream ois = new ObjectInputStream(new FileInputStream(f));
            try {
                List<Abonat> obiect = (List<Abonat>) ois.readObject(); // "variable `obiect` is not used" 
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(CarteDeTelefon.class.getName()).log(Level.SEVERE, null, ex);
            }
        System.out.println("s-a incarcat ");

}
public void loadContact()引发IOException{
ObjectInputStream ois=新ObjectInputStream(新文件InputStream(f));
试一试{
List OBECT=(List)ois.readObject();/“未使用变量`OBECT`”
}捕获(ClassNotFoundException ex){
Logger.getLogger(CarteDeTelefon.class.getName()).log(Level.SEVERE,null,ex);
}
System.out.println(“s-a-CAT”);
}

这没有任何用处:

ois.readObject();
等同于本规范:

3 + 5;
是的,这是一个有效的Java,但是您没有对它做任何操作就抛出了结果。对于我的简单示例,我将把加法的结果分配给一个int变量:

int result = 3 + 5;
// now I can print out the result, or use it elsewhere.
对于代码,需要将读入的内容分配到变量中,并且该变量的类型必须与ListaContact变量的类型相同。您还需要将从方法返回的结果强制转换为该类型

SomeType someVar = (SomeType) ois.readObject; // catch relevant exceptions
// here create my new table model with someVar.

像往常一样,把大问题分解成小得多的子问题,然后试着孤立地解决每个问题。事实上,我担心你的问题过于宽泛,事实上应该是几个独立的问题(但不是一次问完)。此外,你会希望接受Camickr对你的问题的回答。使用a来处理延迟不确定的定期任务。@Hovercraft Full Eels感谢你的建议,如果我尝试List Obict=(List),我已经更新了我的问题ois.readObject();它说“obect”没有被使用,这是真的,但我应该使用它吗?@Zodrak:如果你尝试了一些东西,但它不起作用,那么你应该将你的尝试作为对你的问题的编辑,在底部显示你的新代码(但不是删除旧代码或文本),并描述代码存在的任何和所有问题。如果您收到错误消息或异常,请发布实际完整的消息。不要试图解释这个消息,因为如果你这样做,你可能会遗漏关键信息。@Zodrak:我不知道我们如何告诉你如何使用你的对象,因为这在很大程度上取决于你没有向我们展示的代码。考虑如何使用此变量创建新的表模型,然后执行此操作。然后用这个模型设置你的JTable。我不知道如何使用这个变量,因为我已经完成了模型、表和数组。@佐德拉克:同样,你必须使用这个变量来构造你的模型。方法将取决于您的代码。
SomeType someVar = (SomeType) ois.readObject; // catch relevant exceptions
// here create my new table model with someVar.