【问题标题】:Why am I getting NotSerializableException?为什么我会收到 NotSerializableException?
【发布时间】:2013-08-02 19:46:48
【问题描述】:

我有一个实现 Serializable 的类,但是每当我尝试将它写入磁盘时,我都无法找到为什么它会抛出此异常。我正在尝试编写 ValueConatiner.class

public class ValueContainer implements Serializable {
    private static final long serialVersionUID = 2846820178517499793L;
    public String name;
    public MonetaryField buy;
    public MonetaryField sell;
    public MonetaryField revenue;
    public MonetaryField cost;
    public MonetaryField listing_fee;
    public MonetaryField sale_fee;
    public MonetaryField profit;
    public int quantity;
    public int investment;
    public int period;

    public ValueContainer(String n, MonetaryField b, MonetaryField s,
                          MonetaryField r, MonetaryField c, MonetaryField lf,
                          MonetaryField sf, MonetaryField p, int q,
                          int i, int per) {
            name = n;
            buy = b;
            sell = s;
            revenue = r;
            cost = c;
            listing_fee = lf;
            sale_fee = sf;
            profit = p;
            quantity = q;
            investment = i;
            try {
                    period = per;
            } catch(NumberFormatException e) {
                    System.out.println("No data. Enter a number.");
            }
    }
}

我正在尝试在一个单独的类中使用此方法将其写入磁盘,其中我持有我的 JMenuBar。

private void saveFile() {
    if(!currentFile.exists()) {
        loadFile();
    }
    if(currentFile.exists()) {
        try {
            ValueContainer values = getValues();
            FileOutputStream f_out = new FileOutputStream(currentFile);
            ObjectOutputStream obj_out = new ObjectOutputStream(f_out);
            try {
                obj_out.writeObject(values);
            } finally {
                obj_out.close();
                f_out.close();
            }
            System.out.println("Saved!");
        } catch(IOException e) {
            System.out.println(e);
        }
    }
}

【问题讨论】:

  • 你能把堆栈跟踪吗?
  • MonetaryField Serializable?
  • 实际上,MonetaryField 没有序列化,但即使更改它仍然会抛出异常。使用 e.getMessage() 时,它会显示 javax.swing.GroupLayout。
  • 那么MonetaryField 不是真的可序列化的。请参阅下面的this answer

标签: java objectoutputstream notserializableexception


【解决方案1】:

我只是想在黑暗中拍张照片然后说......

MonetaryField 也需要可序列化。

【讨论】:

    【解决方案2】:

    ...当遍历一个图时,一个 可能会遇到不支持 Serializable 的对象 界面。在这种情况下,将抛出 NotSerializableException 并将识别不可序列化对象的类。

    来自 javadocs。为了使您的 Instance 可序列化,对象图中的所有对象也必须是可序列化的。仔细检查是否是这种情况。

    【讨论】:

      【解决方案3】:

      如果类实现了serializable 并且它的所有非原始字段都是serializable,则它是可序列化的。可能MonetaryField 不是serializable

      【讨论】:

        猜你喜欢
        • 2013-07-15
        • 2021-04-20
        • 2023-04-05
        • 2016-08-21
        • 2014-07-04
        • 2020-06-06
        • 2018-12-26
        • 2021-03-05
        • 2013-07-13
        相关资源
        最近更新 更多