问题理解Serializable

时间:2011-07-23 20:03:15

标签: java serialization jlist serializable

刚开始使用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

2 个答案:

答案 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年前这个问题已经解决了,但由于内存不好,解决方案已经丢失​​了。