Сохранение большого количества динамического пользовательского ввода - PullRequest
1 голос
/ 22 июля 2011

У меня есть клиентская прикладная программа, которая имеет более 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.Кто-нибудь может объяснить, почему это так?

1 Ответ

0 голосов
/ 22 июля 2011

Если вы просто хотите сериализовать объект, совместимый со спецификацией JavaBeans, посмотрите на XML Encoder и Decoder: http://download.oracle.com/javase/6/docs/api/java/beans/XMLEncoder.html, http://download.oracle.com/javase/6/docs/api/java/beans/XMLDecoder.html

EDIT: учебное пособие здесь: http://java.sun.com/products/jfc/tsc/articles/persistence4/

...