Сохранение формы
От: Аноним  
Дата: 28.04.04 12:18
Оценка:
есть форма довольно большая куча контролов на ней
нужно соранять состояние в файле и уметь его загружать

Вопрос: как наиболее эффективно и удобно это сделать ?
Re: Сохранение формы
От: Blazkowicz Россия  
Дата: 28.04.04 12:36
Оценка:
Здравствуйте, Аноним, Вы писали:

А>есть форма довольно большая куча контролов на ней

А>нужно соранять состояние в файле и уметь его загружать

А>Вопрос: как наиболее эффективно и удобно это сделать ?


Чисто в теории форма должна легко сериализоваться. На практике же скорее всего придется немного подкрутить классы и расставить где transient
Re[2]: Сохранение формы
От: Аноним  
Дата: 28.04.04 12:38
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Здравствуйте, Аноним, Вы писали:


А>>есть форма довольно большая куча контролов на ней

А>>нужно соранять состояние в файле и уметь его загружать

А>>Вопрос: как наиболее эффективно и удобно это сделать ?


B>Чисто в теории форма должна легко сериализоваться. На практике же скорее всего придется немного подкрутить классы и расставить где transient


А можно немного поподробнее что значит "подкрутить классы и расставить где transient" ?

спасибо !
Re[3]: Сохранение формы
От: Blazkowicz Россия  
Дата: 28.04.04 12:45
Оценка:
Здравствуйте, Аноним, Вы писали:

B>>Чисто в теории форма должна легко сериализоваться. На практике же скорее всего придется немного подкрутить классы и расставить где transient


А>А можно немного поподробнее что значит "подкрутить классы и расставить где transient" ?


Ещё по идее тебе нужно будет сериализовать только классы модели. А форма-то хоть свинговая?
Смотри ObjectInputStream, ObjectOutputStream.
transient'ом нужно будет пометить поля (в классах), которые ты сериализовать не хочешь.
Re[4]: Сохранение формы
От: Аноним  
Дата: 28.04.04 12:48
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Здравствуйте, Аноним, Вы писали:


B>>>Чисто в теории форма должна легко сериализоваться. На практике же скорее всего придется немного подкрутить классы и расставить где transient


А>>А можно немного поподробнее что значит "подкрутить классы и расставить где transient" ?


B>Ещё по идее тебе нужно будет сериализовать только классы модели. А форма-то хоть свинговая?

B>Смотри ObjectInputStream, ObjectOutputStream.
B>transient'ом нужно будет пометить поля (в классах), которые ты сериализовать не хочешь.


Да свинговая

спасибо понял сейчас попробую...
Re[4]: Сохранение формы
От: Аноним  
Дата: 28.04.04 13:12
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Здравствуйте, Аноним, Вы писали:


B>>>Чисто в теории форма должна легко сериализоваться. На практике же скорее всего придется немного подкрутить классы и расставить где transient


А>>А можно немного поподробнее что значит "подкрутить классы и расставить где transient" ?


B>Ещё по идее тебе нужно будет сериализовать только классы модели. А форма-то хоть свинговая?

B>Смотри ObjectInputStream, ObjectOutputStream.
B>transient'ом нужно будет пометить поля (в классах), которые ты сериализовать не хочешь.

не понимаю ...

делаю так вешаю на кнопку обработчик он дергает saveConfiguration
private void save(FileOutputStream fout) throws IOException {
        ObjectOutputStream o = new ObjectOutputStream(fout);
        o.writeObject(this);
}


а загрузить как ?
Re[5]: Сохранение формы
От: Blazkowicz Россия  
Дата: 28.04.04 13:19
Оценка: +1
Здравствуйте, Аноним, Вы писали:


А>не понимаю ...


А>делаю так вешаю на кнопку обработчик он дергает saveConfiguration

А>
А>private void save(FileOutputStream fout) throws IOException {
А>        ObjectOutputStream o = new ObjectOutputStream(fout);
А>        o.writeObject(this);
А>}
А>


А>а загрузить как ?


Ты издеваешься? ObjectInputStream и погнали. Лучше всю форму не сериализовать. А сериализовать, допустим все начиная с root pane. Потом при десериализации поменять root pane у формы и всё.

Опять же. Я бы сериализовал только классы-модели. Где это возможно. Но если форма большая, уже готовая и модель там отделена плохо. То придется все сериализовать
Re[6]: Сохранение формы
От: Аноним  
Дата: 28.04.04 13:34
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Здравствуйте, Аноним, Вы писали:



А>>не понимаю ...


А>>делаю так вешаю на кнопку обработчик он дергает saveConfiguration

А>>
А>>private void save(FileOutputStream fout) throws IOException {
А>>        ObjectOutputStream o = new ObjectOutputStream(fout);
А>>        o.writeObject(this);
А>>}
А>>


А>>а загрузить как ?


B>Ты издеваешься? ObjectInputStream и погнали. Лучше всю форму не сериализовать. А сериализовать, допустим все начиная с root pane. Потом при десериализации поменять root pane у формы и всё.


B>Опять же. Я бы сериализовал только классы-модели. Где это возможно. Но если форма большая, уже готовая и модель там отделена плохо. То придется все сериализовать



модели там вообще нет ...
делаю так
private void load(FileInputStream fis) throws IOException, ClassNotFoundException {
        ObjectInputStream o = new ObjectInputStream(fis);
        JRootPane myRootPane = (JRootPane)o.readObject();
        this.setRootPane(myRootPane);
}    

private void save(FileOutputStream fout) throws IOException {
        ObjectOutputStream o = new ObjectOutputStream(fout);
        o.writeObject(this.getRootPane());
}


при нажатии на лоад виснет намертво ...
Re[7]: Сохранение формы
От: Blazkowicz Россия  
Дата: 28.04.04 13:42
Оценка:
Здравствуйте, Аноним, Вы писали:

А>модели там вообще нет ...


Я имел ввиду классы-модели swing.
То есть допустим, есть JTable у него есть TableModel. ИМХО, по хорошему нужно сериализовать только TableModel. А при десериализации устанавливать эту модель существующей таблице. То же самое со всеми остальными контролами. Но такая задача требует не тривиального подхода.

А>делаю так

А>
А>private void load(FileInputStream fis) throws IOException, ClassNotFoundException {
А>        ObjectInputStream o = new ObjectInputStream(fis);
А>        JRootPane myRootPane = (JRootPane)o.readObject();
А>        this.setRootPane(myRootPane);
А>}    

А>private void save(FileOutputStream fout) throws IOException {
А>        ObjectOutputStream o = new ObjectOutputStream(fout);
А>        o.writeObject(this.getRootPane());
А>}
А>


А>при нажатии на лоад виснет намертво ...

Класс.
Ну по этому я и говорил что в теории оно так должно работать, а на практике...
приходиться разбираться почему что-то не сериализуется, или сериализуется что-то лишнее.
В общем не все так просто. Как кажется на первый взгляд. 8)
Re[8]: Сохранение формы
От: Аноним  
Дата: 28.04.04 13:46
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Здравствуйте, Аноним, Вы писали:


А>>модели там вообще нет ...


B>Я имел ввиду классы-модели swing.

B>То есть допустим, есть JTable у него есть TableModel. ИМХО, по хорошему нужно сериализовать только TableModel. А при десериализации устанавливать эту модель существующей таблице. То же самое со всеми остальными контролами. Но такая задача требует не тривиального подхода.

А>>делаю так

А>>
А>>private void load(FileInputStream fis) throws IOException, ClassNotFoundException {
А>>        ObjectInputStream o = new ObjectInputStream(fis);
А>>        JRootPane myRootPane = (JRootPane)o.readObject();
А>>        this.setRootPane(myRootPane);
А>>}    

А>>private void save(FileOutputStream fout) throws IOException {
А>>        ObjectOutputStream o = new ObjectOutputStream(fout);
А>>        o.writeObject(this.getRootPane());
А>>}
А>>


А>>при нажатии на лоад виснет намертво ...

B> Класс.
B>Ну по этому я и говорил что в теории оно так должно работать, а на практике...
B>приходиться разбираться почему что-то не сериализуется, или сериализуется что-то лишнее.
B>В общем не все так просто. Как кажется на первый взгляд. 8)


Спасибо ! А нельзя ли как-нибудь по другому сделать ?
Re[9]: Сохранение формы
От: dshe  
Дата: 28.04.04 13:57
Оценка:
Здравствуйте, Аноним, Вы писали:

А>>>при нажатии на лоад виснет намертво ...

B>> Класс.
B>>Ну по этому я и говорил что в теории оно так должно работать, а на практике...
B>>приходиться разбираться почему что-то не сериализуется, или сериализуется что-то лишнее.
B>>В общем не все так просто. Как кажется на первый взгляд. 8)

А>Спасибо ! А нельзя ли как-нибудь по другому сделать ?


Еще есть (в 1.4) java.beans.XMLEncoder и java.beans.XMLDecoder
--
Дмитро
Re[9]: Сохранение формы
От: Blazkowicz Россия  
Дата: 28.04.04 13:58
Оценка:
Здравствуйте, Аноним, Вы писали:

B>>В общем не все так просто. Как кажется на первый взгляд. 8)


А>Спасибо ! А нельзя ли как-нибудь по другому сделать ?


Ну, можно. Но эта дорога длинее будет. Вообще все сильно зависит от того как форма написана. Так что просто зависает и никаких исключений не сыпется?
Re[10]: Сохранение формы
От: Blazkowicz Россия  
Дата: 28.04.04 14:01
Оценка:
Здравствуйте, dshe, Вы писали:

А>>Спасибо ! А нельзя ли как-нибудь по другому сделать ?


D>Еще есть (в 1.4) java.beans.XMLEncoder и java.beans.XMLDecoder


Ну, удачи. XML сериализатор только бины сериализует. И если вдруг окажется что у товарища какие-то нужные классы этой спецификации не придерживаются. Хотя может с XML сериализатором все получиться.
Re[10]: Сохранение формы
От: Аноним  
Дата: 28.04.04 14:04
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Здравствуйте, Аноним, Вы писали:


B>>>В общем не все так просто. Как кажется на первый взгляд. 8)


А>>Спасибо ! А нельзя ли как-нибудь по другому сделать ?


B>Ну, можно. Но эта дорога длинее будет. Вообще все сильно зависит от того как форма написана. Так что просто зависает и никаких исключений не сыпется?



ага просто виснет. я думаю отказаться от сериализации вообще
Re[11]: Сохранение формы
От: Blazkowicz Россия  
Дата: 28.04.04 14:06
Оценка:
Здравствуйте, Аноним, Вы писали:

А>ага просто виснет. я думаю отказаться от сериализации вообще


Ню-ню.
Re[11]: Сохранение формы
От: dshe  
Дата: 28.04.04 14:12
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Blazkowicz, Вы писали:


B>>Здравствуйте, Аноним, Вы писали:


B>>>>В общем не все так просто. Как кажется на первый взгляд. 8)


А>>>Спасибо ! А нельзя ли как-нибудь по другому сделать ?


B>>Ну, можно. Но эта дорога длинее будет. Вообще все сильно зависит от того как форма написана. Так что просто зависает и никаких исключений не сыпется?


А>ага просто виснет. я думаю отказаться от сериализации вообще


Возьми в дебагере и останови поток который виснет. И посмотри stack. Может быть причина зависания сразу станет ясна. Может не сразу. В любом случае, просто так зависать не может.
--
Дмитро
Re[5]: Сохранение формы
От: guisoft  
Дата: 10.07.04 16:14
Оценка:
Крайне не рекомендую пользоваться дефолтной
сериализацией для Свинга, так как в Свинге в документации
везде где только можно написано:

...
Warning: Serialized objects of this class will not be compatible with future Swing releases. The current serialization support is appropriate for short term storage or RMI between applications running the same version of Swing. As of 1.4, support for long term storage of all JavaBeansTM has been added to the java.beans package. Please see XMLEncoder.
...

Наш выбор для Свинга — XMLEncoder/XMLDecoder...

Bye.

B>>>>Чисто в теории форма должна легко сериализоваться. На практике же скорее всего придется немного подкрутить классы и расставить где transient

А>>>А можно немного поподробнее что значит "подкрутить классы и расставить где transient" ?
B>>Ещё по идее тебе нужно будет сериализовать только классы модели. А форма-то хоть свинговая?
B>>Смотри ObjectInputStream, ObjectOutputStream.
B>>transient'ом нужно будет пометить поля (в классах), которые ты сериализовать не хочешь.
А>Да свинговая
А>спасибо понял сейчас попробую...
... << RSDN@Home 1.1 beta 2 >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.