java - 在另一个类中使用 DefaultComboBoxModel 时出现 NotSerializedException

标签 java notserializableexception comboboxmodel

我正在开展一个大型学校项目,该项目即将结束。 我希望 2 个 JComboBox 在程序中的不同类(JPanel)上同步,在不太了解 JComponents 的工作原理之后,我发现保存数据的不是 JComboBox 本身,而是 ComboBoxModel。

因此,在将 DefaultComboBoxModel 添加到我的 Register(保存我所有数据的类)并将其共享到我的其他两个 JPanel 后,它终于可以工作了。

但是现在,当我将 Register 类写入文件时,我得到了 NotSerializable。 (我已经将 DefaultComboBoxModel 从我的 Register 类中取出,并使所有内容再次恢复正常工作,所以我知道这就是问题所在)。

我在文档中看到,DefaultComboBoxModel 实现了 Serialiazble,模型所持有的对象也是如此。

public class Register implements Serializable
{
    ...
    private DefaultComboBoxModel klippPriser;

    public Register()
    {
        ...
        Object[] antTurer = { new KlippPris(5,0), new KlippPris(10,0.05), new KlippPris(15,0.10) };
        klippPriser = new DefaultComboBoxModel(antTurer);
    }

    public DefaultComboBoxModel getKlippPriser()
    {
        return klippPriser;
    }

我的猜测是,不可能使用 DefaultComboBoxModel 作为列表来存储对象并写入文件,但我不太确定如何解决它并仍然保持程序动态。

我希望我的问题已经说清楚了。谢谢。

编辑2: 模型拥有的 KlippPris 类。 (这不是问题)

public class KlippPris implements Serializable
{
    private int antall;
    private double rabatt;

    ...
}

编辑3: 发现问题不是Register中,而是在SalgAdministrasjon中。 实在想不通为什么……

Salg.java(使用类似的行进行管理。)

public class Salg extends JPanel
{
    private Register register;
    ...
    private JComboBox antTurer;

    public Salg(Register r)
    {
        super();
        register = r;
        gui();
    }

    private void gui()
    {
        ...
        paintKortkjøp();
        ...
    }

    private void paintKortkjøp()
    {
        ...
        // This line cause the exception.
        antTurer = new JComboBox(register.getKlippPriser());

        // This line dosen't cause any problems, but won't let my use my model.
        antTurer = new JComboBox();
    }

为什么会发生这种情况?我没有将 SalgAdministrasjon 写入文件,只是将 Register 写入文件。 我也尝试过 setModel() 但没有成功。

不确定异常是否意味着什么:

com.apple.laf.AquaComboBoxUI

Java v.6、Mac OSX 10.8.3。

最佳答案

为了使对象能够序列化,它不仅必须实现 Serializable,而且所有类成员也应该是可序列化的。任何不需要序列化的字段都可以声明为 transient:

private transient MyUnwrittenType type;

关于java - 在另一个类中使用 DefaultComboBoxModel 时出现 NotSerializedException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16283458/

相关文章:

java - 安卓 : Serializing an array of Objects

java - 如何在jcombobox中动态添加元素?

java - 如何动态地将数组绑定(bind)到JComboBox?

java - 使用自定义字段中的特定条件断言预期异常

java - Derby.log 输出文件未正确填充

java - Arraylist 构造函数不创建新对象引用

jakarta-ee - java.io.WriteAbortedException : writing aborted; java. io.NotSerializedException

java - 如何从字符串中提取数字?

Java 无法序列化包含带有比较器的 TreeMap 的对象

java - 自动刷新jcombobox