刚开始使用Serializable-thingy,我想保存几个列表和一些其他对象,但我似乎无法得到一些正确的东西。
我有一些JLists拥有自己的“DefaultListModel”,我用它来对列表中的东西进行排序,我称之为SortModel类,当我运行程序时,我这样做:
SortModel sortModel = new SortModel();
JList jList = new JList(sortModel);
然后,当程序运行时,会根据指定的需求添加和排序对象,现在,当我保存列表并再次加载它们时,它们是空的。
我还保存了一个包含程序背景的类的对象(用户自己选择),保存后我需要再次将它添加到程序中(对象,背景存储在其中),我需要再次将它添加到程序中不仅“加载它”,而且还有一些我在自己的侦听器上添加的对象。在我以某种方式成功加载它之后,对象就在那里但是我不能使用它们,所以我觉得听众没有得到保存?
*解释编辑 作为该程序的类扩展了JFrame,我认为没什么好笑的。 “background obect”(称之为map)扩展了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();
使用openMap中的信息(好吧......应该......)来覆盖程序中的某些内容。 * /代码编辑*
将所有内容添加回此对象,甚至将所有内容添加回列表也不会那么难,因为这只是一些列表和一些循环,但我觉得我真的没有得到Serializable ^^所以,有人在乎试图解释为什么不是一切都得救了?如果是,为什么我无法访问它?但如果我能,怎么样? :)
我不知道还有哪些代码应该是相关的,请告诉我你需要哪些更多信息来帮我解决这个问题,粘贴整个程序会非常麻烦,因为它有11个类和很多行。
谢谢< 3
答案 0 :(得分:1)
您必须向我们展示的代码必须足以证明您的错误,不幸的是,我必须说明您的错误。例如,如果我在一个非常简单的例子中使用你的代码(我建议你这样做),你会发现它有效。我的测试代码:
Mappedoodle.java
import java.io.Serializable;
public class Mappedoodle implements Serializable {
private static final long serialVersionUID = -1760231235147491826L;
private String text;
private int value;
public Mappedoodle(String text, int value) {
this.text = text;
this.value = value;
}
public String getText() {
return text;
}
public int getValue() {
return value;
}
@Override
public String toString() {
return text + ", " + value;
}
}
MappedoodleSerialize.java
import java.io.*;
public class MappedoodleSerialize {
public static void main(String[] args) {
Mappedoodle savedMap = new Mappedoodle("Fubar", 200);
FileOutputStream fOut;
try {
// your code below
fOut = new FileOutputStream("testFile.mpd");
ObjectOutputStream outSt = new ObjectOutputStream(fOut);
outSt.writeObject(savedMap);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
MappedoodleDeSerialize.java
import java.io.*;
public class MappedoodleDeSerialize {
public static void main(String[] args) {
try {
// your code below
FileInputStream fIn = new FileInputStream("testFile.mpd");
ObjectInputStream inSt = new ObjectInputStream(fIn);
Mappedoodle openedMap = (Mappedoodle) inSt.readObject();
System.out.println(openedMap);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
}
}
}
这段代码按预期编译,运行和输出。您的错误必须在您未向我们展示的代码中。
答案 1 :(得分:0)
5年前这个问题已经解决了,但由于内存不好,解决方案已经丢失了。