【问题标题】:keep getting an ionotseriaizableexception, what did i do wrong?不断收到不可序列化的异常,我做错了什么?
【发布时间】:2011-08-28 13:26:27
【问题描述】:

所以,我有一个具有以下属性的类

private String name;
private int counter;

private DateFormat df;
private DecimalFormat def;

private ArrayList<Bike> bike;
static String[] titles = {"some,items,here"};

所有这些都已经初始化,然后我在上面声明了 public class Motor extends AbstractTableModel implements Serializable 但是当我使用 ObjectOutputStream 时仍然会收到 IONotSerializableException,是否有一些限制,我现在可能知道这就是为什么它会这样?

【问题讨论】:

  • AbstractTableModel 有没有不可序列化的成员?例如,您是否添加了未实现SerializableExternalizable 的侦听器? Bike 是可序列化的吗?
  • 哦,将Bikes 放入您的Motor 是违反面向对象原则的。 Motor 应该包含一个HamsterWheel,其中包含一个Hamster,大家都知道仓鼠不能骑Bikes。
  • 迈克,不用担心违规行为,但不完全是这样。在旁注中,AbstractDataModel 用作我的 JTable 的表模型,我不确定它们是否有任何不可序列化的成员。但是,抛开电机问题不谈,我是否在这里做错了无法实现可序列化的事情?

标签: java serialization io objectoutputstream implements


【解决方案1】:

所有这些字段都是可序列化的,Bike 可能除外。

也就是说:

  • 自行车不可序列化。或者它可能是可序列化的,但实际自行车对象的字段之一不是完全可序列化的。
  • 您还没有向我们展示 Motor 的其他一些不可序列化的字段。
  • AbstractTableModel 或其超类具有不可序列化的字段。

异常消息和完整的堆栈跟踪应该为问题的真正根源提供线索。

【讨论】:

  • java.io.NotSerializableException: com.apple.laf.AquaPainter$DirectOSXSurfacePainter at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1164) at
  • 嗯,这很明显......它告诉你它正在尝试序列化一些 GUI 框架对象(异常消息中给出的类名)。现在你必须弄清楚在 your 类中哪里有对这些对象之一的引用,或者是引用它们的某个对象。寻找对 GUI 框架对象的引用——它们不应该被序列化,应该声明为 transient 以防止这种情况发生。
猜你喜欢
  • 2021-11-28
  • 1970-01-01
  • 2014-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多