【问题标题】:Java Serializable Object failsJava 可序列化对象失败
【发布时间】:2013-12-04 03:08:24
【问题描述】:

我在将 Serializable 对象写入文件时遇到问题。我已经能够缩小问题的范围,但不知道是什么原因造成的,所以我只是在寻找任何人可能有的建议,因为我不能真正给出一个例子,但我会给出一些 shell 代码来绘制图片。

基本上我有一个对象存储有关我通过将对象写入文件来保存的程序的信息。它有一个 DefaultComboBoxModel 是导致我的问题的一部分。例如:

public class ProgramInfo implements Serializable {
     private DefaultComboBoxModel model = new DefaultComboBoxModel();
     // A bunch of other stuff

     public DefaultComboBoxModel getModel() {
         return model;
     }
     public void setModel(DefaultComboBoxModel m) {
         model = m;
     }
}

然后,我有一个扩展 JPanel 的类,如下所示:

public class SomePanel extends JPanel {
    private SomeOtherClass someOtherClass = new SomeOtherClass();
    private ProgramInfo programInfo;
    // A bunch of other stuff

    public SomePanel(ProgramInfo info) {
        programInfo = info;
        initGUI();
    }

    private void initGUI() {
        JComboBox box = new JComboBox(programInfo.getModel());
    }
}

在我通过调用 model.addElement() 将元素添加到 DefaultComboBoxModel 后出现此问题。但是,如果我的程序中只有一个 SomePanel 实例,则不会出现此问题,但如果我创建 SomePanel 的第二个实例,则在尝试将 ProgramInfo 写入文件时,它会在对象 SomeOtherClass 上引发 java.io.NotSerializableException。如果我注释掉 SomeOtherClass,那么 SomePanel 类中的下一个对象在尝试将 ProgramInfo 写入文件时会引发相同的错误。

请注意,我不是专家级程序员,这只是一种爱好,我完全是自学成才的。任何关于为什么会发生这种情况的建议/阅读材料都会很棒。提前致谢!

【问题讨论】:

  • 当对象或对象的成员不可序列化时会发生此异常。检查是否是这种情况。
  • “我已经能够缩小问题范围......” 什么? “但不知道是什么原因造成的。”原因是什么?例外?堆栈跟踪?

标签: java serialization notserializableexception


【解决方案1】:

字段也必须是可序列化的,因此您应该检查DefaultComboBoxModel 是否实现Serializable。我怀疑它没有。

您应该看到this 作为对象序列化的参考。

【讨论】:

    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    • 1970-01-01
    • 2017-11-23
    相关资源
    最近更新 更多