在java中保存新创建的对象

时间:2014-06-22 18:42:07

标签: java object save jcheckbox

很抱歉让你们烦恼但是我的程序遇到了另一个问题。我无法保存新创建的复选框而不会出现多个错误。基本上,我这样做,所以每当你输入你想要命名的任何内容时,程序都会生成一个新的复选框,但我添加的保存按钮并没有按预期保存程序。我想保存列表,并且能够在需要时返回并修改它。

以下是有问题的部分让我很难过。抱歉格式不佳。

这主要来自较旧的帖子,如果向下滚动,您会看到保存代码。

package appchecklist;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Scanner;

import javax.swing.*;

public class List {
    public JPanel panel = new JPanel();
    Scanner input = new Scanner(System.in);
    public List() {
        JButton button = new JButton("Add checkbox");
        JButton save = new JButton("Save program");             
        JButton load = new JButton("load program");
        panel.setLayout(new BoxLayout(panel,BoxLayout.Y_AXIS));
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                panel.add(new JCheckBox(input.nextLine()));
                    if (input == null) {
                        System.out.println("Please enter a name for a checkbox");
                    }                           

                    panel.revalidate();
                    panel.repaint();
                    SwingUtilities.windowForComponent(panel).pack();
                }
            });

            save.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                    new SaveButton();               
                }   
            });             

            load.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent evt) { 
                    new Loadbutton();
                }   
            });             
            panel.add(button);  
            panel.add(save);
            panel.add(load);
        }
    }
}

package appchecklist;
import java.io.*;

public class SaveButton{
    public SaveButton() {
        List savedata = new List();
        try {
            FileOutputStream saveFile = new FileOutputStream("Checklist.java");
            ObjectOutputStream save = new ObjectOutputStream(saveFile);
            save.writeObject(savedata);
            save.close();
        } catch (Exception exc){ exc.printStackTrace(); }
    }
}  

2 个答案:

答案 0 :(得分:0)

您的List类不可序列化。只需改变

 public class List {

 public class List implements Serializable{

有关详细信息,请参阅documentation on Serializable。可以自定义序列化。

答案 1 :(得分:0)

感谢您的帮助,我将保存部分添加到List类的顶部。对于其他任何人,此更改导致程序的保存部分出现零错误。我仍然需要修理装载部件。

public class List implements Serializable {
public JPanel panel = new JPanel();
    Scanner input = new Scanner(System.in);

     private void writeObject(java.io.ObjectOutputStream out)
             throws IOException {
     }
         private void readObject(java.io.ObjectInputStream in)
             throws IOException, ClassNotFoundException {
        }
         private void readObjectNoData()
             throws ObjectStreamException {
        }