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

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

但是现在当我将Register-Class写入文件时,我得到了NotSerializable。 (我一直在从Register类中移除DefaultComboBoxModel,并使所有内容重新恢复工作,所以我知道这就是问题所在)。

我在文档中可以看到,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(Administrasjon使用相同的代码。)

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();
    }


为什么会这样呢?我既不写Salg也不写Administrasjon文件,只是写寄存器。
我也尝试过setModel()却没有运气。

不知道异常是否意味着什么:

com.apple.laf.AquaComboBoxUI


Java v.6,Mac OSX 10.8.3。

最佳答案

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

private transient MyUnwrittenType type;

09-05 18:23