我知道这个网站不是针对这样的问题而做的,但我一直在寻找答案,我没有找到任何东西,我需要确认。
我有一个单例类,这是我的程序的中心,在某些情况下我试图保存其状态,但它似乎没有正确保存,我不明白为什么因为这不是我第一次这样做,但这是我第一次尝试保存单例,那么是否可以保存单例对象? 以下是此对象的加载和保存代码
public void Loading(String name) {
ObjectInputStream is = null;
//ignore this variable
game_loaded = 1;
try {
is = new ObjectInputStream(new FileInputStream(name + ".dat"));
//Logica is the singleton class,
//logi is the name of the variable where it is
logi = (Logica) is.readObject();
} catch (FileNotFoundException e1) {
JOptionPane.showOptionDialog(frame, "Game Invalid", "Load",
JOptionPane.YES_NO_OPTION, JOptionPane.INFORMATION_MESSAGE,
null, new String[] { "Ok" }, "Ok");
return;
} catch (IOException e1) {
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
}
JOptionPane.showOptionDialog(frame, "Game Loaded Sucessfully", "Load",
JOptionPane.YES_NO_OPTION, JOptionPane.INFORMATION_MESSAGE,
null, new String[] { "Ok" }, "Ok");
}
保存:
public void saving(String nome){
ObjectOutputStream os = null;
try {
os = new ObjectOutputStream(new FileOutputStream(nome+".dat"));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
return;
} catch (IOException e) {
// TODO Auto-generated catch block
return;
}
try {
os.writeObject(Logica.getLogica(null));
} catch (IOException e) {
// TODO Auto-generated catch block
return;
}
JOptionPane.showOptionDialog(frame, "Game Saved sucessfully", "Load",
JOptionPane.YES_NO_OPTION, JOptionPane.INFORMATION_MESSAGE,
null, new String[] { "Ok" }, "Ok");
if (os != null)
try {
os.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
修改
好的我可能已经解释过,它没有给我任何错误加载,但它没有加载我保存的状态,它加载一个新的“Logica”,好像我创建了一个新的
答案 0 :(得分:3)
Singleton本身并没有说它无法序列化;您可以为任何类编写不正确的序列化代码。目前尚不清楚什么是错的,我不愿意仔细研究你的代码来解决它,但应该可以做到。
IOException有一个空的catch块。这总是一个坏主意。你吞下了可能解释一切的异常。打印堆栈跟踪。
答案 1 :(得分:0)
您所描述的情况是不可能的。你没有正确描述它。你的观察可能有问题。
我强烈怀疑IOException或FileNotFoundException,尽管你在另一个答案中发表评论。您已发布了至少在四个不同位置忽略异常的代码。推定是压倒性的。
事实上,您的异常处理需要大量工作。例如,如果出现异常,您不会关闭该文件。没有最后的块。你有多个try / catch块,你应该尝试一次和多次捕获。
其他问题的其他问题。是否正在创建文件?长度非零?或者也许单身类只有瞬态字段?