我想将一个对象(GameModel)序列化为file,然后从该文件反序列化该对象。
我有一个UIFClass,它有一个方法来获取一个返回字符串的文件名。我还有序列化部分的两个类,GameSerializerClass和GameDeserializerClass。它们都是Actionlistener的子类
以下是实施部分所需的内容:
从UIFClass通过JFileChooser获取用户选择的文件 在UIFClass中使用GameSerializerClass,它是将GameModel对象序列化(保存)到用户指定文件中的actionlistener。 使用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)。
它不写入文件,我不知道为什么!
以下是代码:
公共类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图。我正在尝试使用快照模式。
请帮帮我谢谢。