У меня есть клиентская прикладная программа, которая имеет более 10 классов, каждый из которых содержит более 100 компонентов, которые необходимо отслеживать.Когда программа запускается, пользователь вводит числа, выбирает элементы, переключает флажки и т. Д. Мне нужно придумать способ сохранить все введенные данные при закрытии программы и иметь возможность при повторном запуске программы захватить.все данные предыдущего запуска.
Я посмотрел сериализацию, но некоторые вещи, которые мне нужно сохранить, не сериализуются, поэтому они не работают.Я также рассмотрел 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.Кто-нибудь может объяснить, почему это так?