我正在创建一个带有XYChart.Series参数的对象Person的javafx运行状况程序。在我调用save()方法创建用户后,我收到错误Error writing to data file: javafx.scene.chart.XYChart$Series
这是我创建此人并将其添加到我的ArrayList用户列表时的代码:
Person person = new Person(height, weight, age, waist, gender, username, password, activityIntensity, calorieSeries, waterSeries, exerciseSeries);
userList.add(person);
我的保存方法:
public void save()
{
FileOutputStream fileID;
ObjectOutputStream outFile;
try
{
fileID = new FileOutputStream(FILENAME);
outFile = new ObjectOutputStream(fileID);
outFile.writeObject(userList);
outFile.close();
}
catch (IOException e)
{
System.out.println("Error writing to data file: " + e.getMessage());
}
}
之前,我正在保存arrayLists而不是XYChart.Series并且工作正常,但我不明白为什么它没有将XYChart.Series保存到.ser文件。
答案 0 :(得分:1)
XYChart.Series
类不是Serializable
,因此当您尝试将包含该对象的任何对象序列化为其持久状态时,您将收到错误。你有几个选择:
transient
Externalizable
而不是Serializable
。您必须实施readExternal
和writeExternal
方法。这可能有点痛苦,因为你似乎有很多字段,但基本上你的writeExternal
方法会编写所有可序列化的字段,然后写一个可序列化的图表数据形式(例如写入数据) ArrayList
)。 readExternal
方法将数据读回(以相同的顺序)并从中重新构造字段值;对于图表数据,它将读取ArrayList
(例如)并从中构建图表数据。您没有发布Person
课程,因此我无法详细说明如何操作,但该说明应该足够了。
只是一个评论:让Person
类(本质上是模型数据,即实体)保持对XYChart.Series
的引用(这实际上是UI数据)似乎有点奇怪的设计,它最多属于View-Model)。实体应该真正了解其中的数据是如何呈现的。最好恢复使用java.util.List
类中的Person
,并将数据从那里“连接”到您的图表中。