java - Javafx SimpleStringProperty 反序列化抛出 IllegalStateException: 未读块数据
问题描述
我正在使用 javafx 开发应用程序。我必须将我的数据保存在一个文件中。我使用序列化,但由于我使用 SimpleStringProperty 我有一个问题。SimpleStringProperty 不可序列化,因此我创建了两个方法 writeObject 和 readObject。写方法效果很好(我认为,它写在文件中),但读方法不行。当我阅读我得到的保存文件时
java.lang.IllegalStateException: unread block data throwed.
这是我的数据的类图。我试图保存的是员工。
private void writeObject(ObjectOutputStream s) throws IOException
{
s.defaultWriteObject();
s.writeInt(id);
s.writeUTF(firstname.get());
s.writeUTF(lastname.get());
s.writeUTF(phoneNumber.get());
s.writeBoolean(gender.get());
}
private void readObject(ObjectInputStream s) throws IOException, ClassNotFoundException
{
id = s.readInt();
firstname.set(s.readUTF());
lastname.set(s.readUTF());
phoneNumber.set(s.readUTF());
gender.set(s.readBoolean());
}
你知道问题可能是什么吗?
java.lang.IllegalStateException: unread block data
at java.io.ObjectInputStream$BlockDataInputStream.setBlockDataMode(ObjectInputStream.java:2783)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1605)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2287)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2211)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2069)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1573)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:431)
at java.util.ArrayList.readObject(ArrayList.java:797)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1170)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2178)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2069)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1573)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:431)
at sample.Main.loadData(Main.java:61)
at sample.Main.start(Main.java:27)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$161(LauncherImpl.java:863)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$174(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl.lambda$null$172(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$173(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177)
at java.lang.Thread.run(Thread.java:748)
解决方案
好的,我缺少的是在调用 readObject 时,对象没有被初始化,所以 readObject 就像一个构造函数。所有 SimpleProperties where null 并且firstname.set(s.readUTF());
正在引发空指针异常。
推荐阅读
- activemq-artemis - 我们可以使用命令行创建 artemis 转移吗?
- django - 如何在 django 中动态过滤多个值的模型结果
- reactjs - Reactjs项目安装问题
- entity-framework - 从 JSON 对象创建实体框架模型
- java - Java-无法为最终变量赋值
- plsql - 下载旧版本的 SonarPLSQL 插件
- javascript - 无法切换到 Salesforce 闪电页面中的框架
- c - 如何防止加载静态库中的所有符号以及为什么在链接静态库时将同一 .o 文件中的其他符号导出以进行测试
- c - 如果键相同,则将链接列表添加到 BST
- jquery - jQuery DataTables 不适用于水平滚动