我正在获取java.io.NotSerializableException,而与可序列化接口的实现无关

问题描述 投票:0回答:1

我在运行代码时收到NotSerializableException,但不确定为什么。

java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: passOffs.StampedLevels

我已检查以确保该类实现了Serializable接口,并且该类中的所有字段均为Serializable

这是我的课程:

package passOffs;

import java.io.Serializable;

public class StampedLevels implements Serializable{

    private static final long serialVersionUID = 1L;

    private String levelItem;
    private String date;
    private boolean passed;

    public StampedLevels(String levelItem, String date, boolean passed) {
        this.levelItem = levelItem;
        this.date = date;
        this.passed = passed;
    }

    public String getItem() {
        return levelItem;
    }

    public String getDate() {
        return date;
    }

    public String getStatus() {
        if(passed) {
            return "Passed";
        }
        else {
            return "Un-Passed";
        }
    }

    @Override
    public String toString() {
        return getItem() + "    " + getStatus() + "   " + getDate();
    }
}

此外,如果有帮助,这是我与错误相处的堆栈跟踪。

at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1598)
    at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:430)
    at org.apache.commons.collections4.queue.CircularFifoQueue.readObject(CircularFifoQueue.java:141)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at java.base/java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1160)
    at java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2216)
    at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2087)
    at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1594)
    at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:430)
    at passOffs.levelInfo.readObjectFromFile(levelInfo.java:1793)
    at passOffs.levelInfo.passOff(levelInfo.java:407)
    at passOffs.ChoirDisplay$9.actionPerformed(ChoirDisplay.java:362)
    at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967)
    at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2308)
    at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405)
    at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262)
    at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279)
    at java.desktop/java.awt.Component.processMouseEvent(Component.java:6632)
    at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3342)
    at java.desktop/java.awt.Component.processEvent(Component.java:6397)
    at java.desktop/java.awt.Container.processEvent(Container.java:2263)
    at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5008)
    at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
    at java.desktop/java.awt.Component.dispatchEvent(Component.java:4840)
    at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4918)
    at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4547)
    at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4488)
    at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)
    at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2772)
    at java.desktop/java.awt.Component.dispatchEvent(Component.java:4840)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
    at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
    at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:743)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
    at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

编辑:StackTrace错误很可能在这里发生

Calendar dateTime = Calendar.getInstance();
Date newDate = dateTime.getTime();
DateFormat df = DateFormat.getDateInstance();
String date = df.format(newDate);

Queue<StampedLevels> tempQueue = (Queue<StampedLevels>) readObjectFromFile(queueSource);

tempQueue.add(new StampedLevels(item, date, true));

writeToFile(tempQueue, queueSource);

但是NotSerializable错误指向其他地方。

这是我的writeToFile方法:

public void writeToFile(Object object, String source) {
        try {
            FileOutputStream fileOut = new FileOutputStream(source);
            ObjectOutputStream objectOut = new ObjectOutputStream(fileOut);
            objectOut.writeObject(object);
            objectOut.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

readObjectFromFile方法

private Object readObjectFromFile(String source) {
        try {
            FileInputStream fileIn = new FileInputStream(source);
            ObjectInputStream objectIn = new ObjectInputStream(fileIn);

            Object obj = objectIn.readObject();

            objectIn.close();
            return obj;

        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }
    }

提前感谢。

java serializable notserializableexception
1个回答
0
投票

此问题已解决(请参阅解决方案的注释)。谢谢大家。

© www.soinside.com 2019 - 2024. All rights reserved.