Writeobject to file不适用于java

时间:2015-05-09 03:19:02

标签: java file design-patterns serialization snapshot

我想将一个对象(GameModel)消毒到文件中,然后从该文件中反序列化该对象。

我有一个UIFClass,它有一个方法来获取一个返回字符串的文件名。 我还有序列化部分的两个类,GameSerializerClass和GameDeserializerClass。它们都是Actionlistener的子类

以下是实施部分所需的内容:

  • 从UIFClass
  • 通过JFileChooser获取用户选择的文件
  • 在UIFClass中使用GameSerializerClass,它是actionlistener 将GameModel对象序列化(保存)到用户指定的文件中。
  • 使用GameDeserializerClass,它也是一个actionlistener 从用户指定的文件反序列化(readobject)。

我创建了一个GameModel对象,我在UIFClass中有一个引用。 顺便说一下,UIFClass正在创建GameSerializerClass对象,构造函数具有(GameModel)对象和UIFClass(this)。 它还创建了GameDeserializerClass对象,构造函数具有UIFClass(this)。

我有一个方法可以将JFileChooser的actionlistener设置为GameSerializerClass和GameDeserializerClass。

actionPerformed中的

我正在从字符串创建一个文件对象,然后将其传递给新的ObjectInputStream,然后将ObjectInputStream传递给writeObject(ObjectOutputStream out)。在该方法中使用out.writeObject(GameModel)。

它没有写入文件,我不知道为什么!

以下是代码:

public class GameUserInterface {

    public GameSerializer gmserilizer;
    public GameDeserializer gmdeserilizer;
    public GameModel gmMdl;
    public JFileChooser jfc = new  JFileChooser();
    private String saveFileName;
    static JFileChooser fc;
    FileOutputStream fos ;
    FileInputStream fis ;

    public String getsaveFileName()
    {
        jfc.setFileSelectionMode(fc.FILES_ONLY);
        jfc.showOpenDialog(null);
        File myfile = jfc.getSelectedFile();
        saveFileName = myfile.getAbsolutePath();
        System.out.println("the file name is " + saveFileName); 
        return saveFileName; 
    }

void writeTofile()
    {
        getMilestoneMementoManager();

        try {

            jfc.addActionListener(new GameSerializer(this, this.gmMdl));
            fos = new FileOutputStream(getsaveFileName());
            } catch (IOException ex) {
}

    }

GameSerializerClass

public class GameSerializer implements ActionListener {

    private GameUserInterface ui;
    private GameModel model;

    GameSerializer(GameUserInterface ui , GameModel model)
    {
        this.ui = ui;
        this.model = model;
    }

    private void writeObject(ObjectOutputStream obos) throws IOException
    {
        try {
obos.writeObject(model);
           System.out.println("I reached to that point " + model.toString() );
        } catch (IOException ex) {
            Logger.getLogger(GameSerializer.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    @Override
    public void actionPerformed(ActionEvent e) {        
        try {
            System.out.println("I am at actionPerformed in GameSerializer class !");
            File myFile = new File(ui.getsaveFileName());
            ObjectOutputStream obos = new ObjectOutputStream(new FileOutputStream(myFile));
            writeObject(obos);
        } catch (IOException ex) {
            Logger.getLogger(GameDeserializer.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

enter image description here

我附上了UML图。我正在尝试使用快照模式。

你能帮帮我吗? 谢谢。 后

0 个答案:

没有答案