Jux*_*hin 0 java io serialization
我目前正在使用仅使用Java的学生数据库,并且有两个我想保存的特定列表.学生和个人资料(登录).我目前正在测试学生的序列化只是为了让它工作,但一直有一个奇怪的问题.
我的Student对象类和代码如下:
Student.java
StudentsCollection.java
学生创建我的Student对象(自解释),我的StudentsCollection()实例化一个存储我的Student对象的Student类型列表,当我尝试保存/加载我使用此代码的对象时,抛出以下异常:
/**
* Save student collection
*/
public void saveCollection(){
try {
FileOutputStream e = new FileOutputStream("students.ser");
ObjectOutputStream outputStream = new ObjectOutputStream(e);
for(Students i : this.list){
outputStream.writeObject(i);
}
outputStream.flush();
outputStream.close();
} catch (IOException var3) {
var3.printStackTrace();
JOptionPane.showMessageDialog((Component)null, "Error. Cannot save database.");
}
}
/**
* Open student collection
*/
public void openCollection(){
try {
FileInputStream e = new FileInputStream("students.ser");
ObjectInputStream inputSteam = new ObjectInputStream(e);
while(inputSteam.readObject() != null){
this.list.add((Students)inputSteam.readObject());
}
} catch (FileNotFoundException var3) {
var3.printStackTrace();
JOptionPane.showMessageDialog(null, "File not found");
} catch (IOException var4) {
var4.printStackTrace();
JOptionPane.showMessageDialog(null, "IO Exception");
} catch (ClassNotFoundException var5) {
var5.printStackTrace();
JOptionPane.showMessageDialog(null, "Required class not found");
}
}
Run Code Online (Sandbox Code Playgroud)
并打印以下异常:
java.io.NotSerializableException: java.util.Scanner
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1183)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1547)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1508)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347)
at jdatabase.objects.students.StudentsCollection.saveCollection(StudentsCollection.java:539)
at jdatabase.main.MainController$1.run(MainController.java:22)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:312)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:703)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
Run Code Online (Sandbox Code Playgroud)
我还想指出,students.ser实际上是在我的项目资源管理器中创建的,但是异常仍然被抛出,即使在尝试使用openCollection()时也会抛出错误,但是我想首先正确处理saveCollection()
你没有发布你的Student.java
,所以我猜这里.有类型的字段java.util.Scanner
的Student
类?如果有,请删除它,或将其标记为transient
:
private transient Scanner someField;
Run Code Online (Sandbox Code Playgroud)
该transient
修改将防止序列化的领域.
归档时间: |
|
查看次数: |
1611 次 |
最近记录: |