Я работаю над свинг-приложением, которое в основном включает в себя JTree и некоторые другие компоненты. Полная логика отображения интерфейса основана на корневом узле JTree. Это вложенный узел с индивидуальными пользовательскими объектами UserObject, установленными для каждого из дочерних узлов.
Мне нужно сохранить состояние моего приложения, для которого должен быть сохранен единственный вложенный корневой узел JTree. Я не могу этого сделать.
class SerializeImpl implements Serializable{
def doSerialize() throws Exception{
def root = FeedTree.getInstance().getModel().getRoot()
def object = new SerializableNode(top:root)
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("new.txt"))
out.writeObject(object)
}
def doDeSerialize(){
def file = new File('new.txt')
def serNodeObj
try{
file.withObjectInputStream(getClass().classLoader){ ois ->
ois.eachObject{ serNodeObj = it }
}
return serNodeObj.getValue()
}
catch(FileNotFoundException ex){
return null
}
}
}
class SerializableNode implements Serializable{
def top
def getValue(){
return top
}
}
class FeedTree extends JTree{
...............
a singleton instance
...............
}
Сначала выполняется метод doSerialize()
, за которым следует System.exit(1)
, а затем новое отображение пользовательского интерфейса, которое выполняет doDeSerialize()
.. Метод doSerialize()
записывает что-то в файл news.txt
, но я не являюсь уверен, что он корректно сериализует объект. Более того, System.exit(1)
после сериализации не работает.
После принудительного выхода (из закрытия консоли затмения) первое выполнение doDeSerialize()
вызывает следующее исключение.
Caught: java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: groovy.util.slurpersupport.NodeChildren
at functionalities.SerializeImpl$_doDeSerialize_closure1.doCall(SerializeImpl.groovy:23)
at functionalities.SerializeImpl.doDeSerialize(SerializeImpl.groovy:22)
Я не могу понять, почему сериализация (вероятно) не работает и почему System.exit(1)
не работает правильно после сериализации. Пожалуйста, помогите.