我有一个客户端应用程序,它有10个以上的类,每个类都有100多个需要跟踪的组件。当程序运行时,用户输入数字,选择项目,toogles复选框等。我需要提出一种方法来保存程序关闭时的所有数据输入并具有何时再次运行程序的能力上一次运行的所有数据。
我已经研究过序列化,但是我需要保存的一些东西是不可序列化的,因此无效。我也研究过SingleFrameApplication和会话存储但是徒劳无功。
写入文件将导致需要数小时的繁琐编码,并且可能效率低下。有没有人有任何想法,我怎么能解决这个问题的毛茸茸的野兽?
更新
做什么@home建议我做了以下事情:
public Main() throws FileNotFoundException {
initComponents();
//read the file
Read();
//...
}
private void formWindowClosing(java.awt.event.WindowEvent evt) {
try {
//write to the file, the program is closing
Write();
} catch (FileNotFoundException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
private void Read() throws FileNotFoundException {
try{
XMLDecoder decoder = new XMLDecoder(new BufferedInputStream(new FileInputStream("test.xml")));
//set the JTabbedPane to what is in the file
tab = (JTabbedPane) decoder.readObject();
decoder.close();
}catch(Exception e){
//there was no test.xml file so create one
XMLEncoder encoder = new XMLEncoder(new BufferedOutputStream(new FileOutputStream("test.xml")));
encoder.writeObject(null);
encoder.close();
}
}
private void Write() throws FileNotFoundException {
XMLEncoder encoder = new XMLEncoder(new BufferedOutputStream(new FileOutputStream("test.xml")));
//clear all previous things in the file
encoder.flush();
//write the JTabbedPane into the file
encoder.writeObject(tab);
encoder.close();
}
在执行这些更改后,运行程序时弹出的所有内容都是空白的JTabbedPane。任何人都可以解释为什么会这样吗?
答案 0 :(得分:0)
如果您只想序列化与JavaBeans规范兼容的对象,请查看XML编码器和解码器:http://download.oracle.com/javase/6/docs/api/java/beans/XMLEncoder.html,http://download.oracle.com/javase/6/docs/api/java/beans/XMLDecoder.html
编辑:这里的教程:http://java.sun.com/products/jfc/tsc/articles/persistence4/