Не храните весь объект GUI, так как будет много вещей, связанных с элементами управления, которые вам не нужны.Вместо этого создайте собственный сериализатор, звучит впечатляюще, но на самом деле очень просто.
Возьмите этот простой пример, у класса есть фрейм с именем пользователя вверху, это не сериализуется как деталь для его создания.это просто имя, поэтому не нужно хранить остальную часть объекта JFrame.Другие детали - это простые свойства, которые можно сериализовать.
public class Simple implements Serializable {
private transient JFrame win;
private String username;
private Date postTime;
//...assume getters/setters constructors e.t.c.
private void writeObject( ObjectOutputStream out ) throws IOException {
out.write( this );
out.flush();
}
private Object readObject( ObjectInputStream in ) throws IOException, ClassNotFoundException {
Simple s = (Simple) in.read();
s.setWin( new JFrame( s.getUsername() ) );
//...any other extra setup can be done here
return s;
}
}
Как вы можете видеть, я пытался упростить ситуацию, обратите внимание, я только что написал это, так что еще не пробовал, это скорее"стартер на 10", чем полное решение.Вы можете настроить сериализацию, например, вы можете отправить Long длинному потоку вместо завершенного объекта Date, т.е. выходные данные могли быть out.write (username);out.write (postTime.getTime ());мы, конечно же, разрешаем автоматическую коробку, чтобы позаботиться о том, чтобы превратить нашу длинную в длинную, поэтому есть вероятность, что какой-то хитрый jdk может вместо этого поместить его в целое число и потерять некоторую точность :) плюс изменения в объектах порядка записываются в потокдолжно быть отражено в порядке их чтения из потока.
В любом случае, когда это будет сделано, вы можете записать объекты в файл следующим образом:
ObjectOutputStream oout = new ObjectOutputStream (new FileOutputStream ("blah.bin "));Simple s = новый Simple ();//... установить некоторые значения в s oout.writeObject (s);oout.flush ();oout.close ();ObjectInputStream oin = new ObjectInputStream (new FileInputStream ("blah.bin"));Простой простой = (Простой) oin.readObject ();oin.close ();
, очевидно, я не включил массу дополнительного синтаксиса, необходимого для обработки исключений и эффективного использования потока, но это всего лишь несколько идей.
Если это не такЕсли хотите, тогда вы всегда можете попробовать использовать граф объектов в сериализаторе xml, это очень удобно."java.beans.XMLEncoder" это был очень удобный класс для хранения простых bean-компонентов в текстовых полях в db:)