java - 无论 Serializable 接口实现如何,我都会收到 java.io.NotSerializableException
问题描述
运行代码时出现 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;
}
}
提前致谢。
解决方案
推荐阅读
- c++ - cpp修改中的引用变量
- ios - 应用程序从挂起状态终止后,应用程序界面快照短暂闪烁
- oracle - ORA-06508 调用远程数据库上的过程时
- qt - QML 将信号连接到功能
- asterisk - Asterisk Dialplan AGI 脚本未执行(可能是 Asterisk 权限问题?)
- php - MailChimp API v3 - 无法修补/更新?
- c++ - Asio TCP 服务器在 DLL 卸载时崩溃
- java - API < 21 的 Android 复选框按钮样式
- dialogflow-es - Google Dialogflow V2 - 身份验证 - 访问令牌
- javascript - Sublime Text Ctrl + B 不会显示输出(JavaScript)