【发布时间】:2011-11-20 06:40:36
【问题描述】:
我正在开发一个 Swing 应用程序,它主要包括一个 JTree 和其中的一些其他组件。 UI 显示背后的完整逻辑基于 JTree 的根节点。它是一个嵌套节点,每个子节点都设置了单独的自定义用户对象。
我需要保留应保留 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),然后是一个新的 UI 显示,它执行 doDeSerialize().. doSerialize() 方法确实在 news.txt 文件中写入了一些内容,但我没有确定它是否正确地序列化对象。此外,序列化后的System.exit(1) 不起作用。
在强制退出(从 Eclipse 控制台关闭)后,第一次执行 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) 在序列化后无法正常运行。请帮忙。
【问题讨论】:
标签: java swing groovy jtree serializable