【发布时间】:2011-10-11 18:59:40
【问题描述】:
刚开始使用 Serializable-thingy,我想保存几个列表和其他一些对象,但我似乎无法正确处理一些事情。
我有一些带有自己的“DefaultListModel”的 JList,我用来对列表中的内容进行排序,我调用了 SortModel 类,当我运行程序时,我这样做:
SortModel sortModel = new SortModel();
JList jList = new JList(sortModel);
然后当程序运行后,根据指定的需要添加和排序对象,现在,当我保存列表并再次加载它们时,它们是空的。
我还保存了一个保存程序背景的类的对象(用户自己选择一个),保存后我需要再次将其添加到程序中(对象,背景存储在其中),我需要再次将其添加到程序中,不仅“按原样”加载它,而且我还有一些对象,我用它们自己的侦听器在该对象上添加了一些对象。在我以某种方式成功加载它之后,对象在那里但我不能使用它们,所以我认为听众没有得到保存?
* 解释编辑 作为程序的类扩展了 JFrame,我认为这没什么好笑的。 “背景对象”(称为地图)扩展了 JComponent,我将它添加到(我们现在称之为程序......)程序中,它会弹出它所拥有的图像。然后,我在这张地图上添加了也扩展了 JComponent 的对象(称为点),在添加点之前为这些点分配了自己的侦听器,侦听器可能不是“真正的”侦听器,但它们的行为方式相同,它们是“MouseAdapter”有什么区别吗? /解释编辑 *
* 代码编辑 * 保存代码:
FileOutputStream fOut = new FileOutputStream("testFile.mpd");
ObjectOutputStream outSt = new ObjectOutputStream(fOut);
outSt.writeObject(savedMap);
“testFile.mpd”就是这个样子,我很确定 .mpd 应该没关系,你可以自己编格式,对吧? :) (主类称为 Mappedoodle,.mpd 听起来很合理,不是吗?) "savedMap" 是所述 Mappedoodle 的一个对象,包含所有需要保存的列表和其他信息。
加载代码:
FileInputStream fIn = new FileInputStream("testFile.mpd");
ObjectInputStream inSt = new ObjectInputStream(fIn);
Mappedoodle openedMap = (Mappedoodle)inSt.readObject();
openedMap 中的信息用于(嗯……应该是……)覆盖程序中的某些内容。 * /代码编辑 *
将所有内容重新添加到该对象上,甚至将所有内容重新添加到列表中也不会那么难,因为这只是更多的列表和一些循环,但我觉得我并没有真正获得 Serializable ^^ 所以,有人愿意解释为什么不是所有的东西都得救了?如果是,为什么我无法访问它?但如果我可以,怎么做? :)
我不知道还有哪些代码应该相关,请告诉我您还需要哪些信息来帮助我解决这个问题,粘贴整个程序真的很麻烦,因为它有 11 个类和好几行。
谢谢
【问题讨论】:
-
考虑先用更小更简单的代码来学习序列化。
-
我确实尝试使用用户输入保存/加载 .txt,效果很好!由于我找不到任何关于“对象序列化似乎不适合无缘无故不会被序列化”的信息,我想我会去问问公众。公众知道的东西。很多。
-
您在序列化或反序列化时遇到了错误,但没有代码很难说。但是我们或您很难梳理出您的大程序中的错误。从小处着手,如果失败,请发布您的代码。
-
编辑了 OP,添加了更多可能有用的信息以及保存/加载的代码
标签: java serialization jlist serializable