我想将一个对象(GameModel)消毒到文件中,然后从该文件中反序列化该对象。
我有一个UIFClass,它有一个方法来获取一个返回字符串的文件名。 我还有序列化部分的两个类,GameSerializerClass和GameDeserializerClass。它们都是Actionlistener的子类
以下是实施部分所需的内容:
我创建了一个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);
}
}
}
我附上了UML图。我正在尝试使用快照模式。
你能帮帮我吗? 谢谢。 后