图1
先定义一个只读属性,并进行初始化,用来存储试卷中试题得信息,为了防止用户误操作,改变了文本文件中指定格式得数据,所以要对原文本文件序列化操作,之后在使用反序列化得方式读取文件。
图2
将文本文件读取并调用序列化方法。
图3
这就是序列化得方法。接下里就得注意下反序列化中将文件读取出来赋值得问题。
图4
我圈起来得地方就是将序列化文件读取出来放入得集合中,以后试题文件就都是序列化得方式读取,之前的txt文件读取方式和序列化方式就会被注销掉。
图5
但是请大家注意,我在序列化前,将Private List<Question>objlistquestion赋了一个Null值,这也就是说,一旦序列化后,那么之前在Question对象中得初始化数据都会被覆盖(相当于没有初始化)。并且序列化后,原方法和序列化方法禁用,反序列化读取得集合结果会被赋值给objlistquestion。结果就是你在前端调用得时候,就会出现【未将对象引用设置到对象的实例】得错误,然后你逐个方法去找,看看有没有初始化,结果发现明明都初始化了呀怎么还是报这个错误,其实就在这里。
解决方法:
将序列化得文件先删掉,从新执行一遍序列化,但是图5中Private List<Question>objlistquestion=null,要改为Private List<Question>objlistquestion;这样再执行一遍就ok了。
这个问题困扰了我半天得时间,真的是不好发现,希望这篇文章能帮助像我一样得人。