【问题标题】:Open/Save data from JTable with ObjectOutputStream and ObjectInputStream使用 ObjectOutputStream 和 ObjectInputStream 从 JTable 打开/保存数据
【发布时间】:2014-08-19 14:24:21
【问题描述】:

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

更新:如何不能让它将信息加载回 JTable?

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

代码如下:

model 类中(扩展 AbstractTableModel)

public void saveContact() throws FileNotFoundException, IOException {
    f.createNewFile();
    ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(f));
    oos.writeObject(listaContacte); // listaContacte is the arraylist
    System.out.println("S-a salvat");
}

public void loadContact() throws IOException {
    ObjectInputStream ois = new ObjectInputStream(new FileInputStream(f));
    try {
        ois.readObject();
    } catch (ClassNotFoundException ex) {
        Logger.getLogger(CarteDeTelefon.class.getName()).log(Level.SEVERE, null, ex);
    }
    System.out.println("s-a incarcat ");
}
}

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 ");

}

【问题讨论】:

  • 与往常一样,将任何大问题分解为更小的子问题,然后尝试孤立地解决每个问题。事实上,我担心您的问题过于宽泛,实际上应该是几个单独的问题(但不是一次全部问)。
  • 另外,您需要接受 Camickr 对您的 question from yesterday 的回答。
  • 使用SwingWorker 处理具有不确定延迟的周期性任务。
  • @Hovercraft Full Of Eels 感谢您的建议,我已经更新了我的问题

标签: java swing jtable objectinputstream objectoutputstream


【解决方案1】:

这没有任何用处:

ois.readObject();

并且等价于这段代码:

3 + 5;

是的,这是有效的 Java,但是您将结果扔掉而不做任何事情。对于我的简单示例,我会将加法的结果分配给一个 int 变量:

int result = 3 + 5;
// now I can print out the result, or use it elsewhere.

对于您的代码,您需要将读入的内容分配给一个变量,并且该变量需要与您的 listaContacte 变量的类型相同。您还需要将方法返回的结果转换为该类型。

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

【讨论】:

  • 如果我尝试 List obiect = (List) ois.readObject();它说没有使用“obiect”,这是真的,但我应该使用它吗?
  • @Zodrak:如果您尝试过某些东西但它不起作用,那么您应该将您的尝试发布为对您的问题的编辑,显示您的新代码(但不要删除旧代码或文本) 在底部,并描述代码存在的所有问题。如果您收到错误消息或异常,请发布实际且完整的消息。不要试图解释消息,因为如果这样做,您可能会遗漏关键信息。
  • @Zodrak:我不明白我们如何告诉你如何使用你的对象,因为这在很大程度上取决于你没有向我们展示的代码。想想你将如何用这个变量创建一个新的表模型,然后这样做。然后用这个模型设置你的 JTable。
  • 不完全。我不知道如何使用该变量,因为我已经完成了模型、表格和数组。
  • @Zodrak:同样,您必须使用该变量来构建模型。具体方式取决于您的代码。
猜你喜欢
  • 2015-01-05
  • 1970-01-01
  • 1970-01-01
  • 2013-02-04
  • 2012-05-29
  • 2014-10-18
  • 1970-01-01
  • 2017-09-06
  • 2016-04-11
相关资源
最近更新 更多