XYChart.Series 没有在 javafx 中序列化
XYChart.Series not serializing in javafx
我正在创建一个 javafx 健康程序,其中包含一个带有 XYChart.Series 参数的对象 Person。在调用我的 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 文件。
XYChart.Series
class 不是 Serializable
,因此当您尝试序列化任何包含它的对象作为其持久状态的一部分时,您将收到错误消息。您有几个选择:
- 不要保留图表数据。您可以通过将图表数据字段包含为
transient
来执行此操作
- 实施
Externalizable
而不是 Serializable
。您将必须实施 readExternal
和 writeExternal
方法。这可能有点痛苦,因为您似乎有很多字段,但基本上您的 writeExternal
方法会写入所有可序列化字段,然后写入图表数据的可序列化形式(例如,将数据写入一个 ArrayList
)。 readExternal
方法将读回数据(以相同的顺序)并从中重建字段值;对于图表数据,它将读取 ArrayList
(例如)并从中构建图表数据。
你没有 post 你的 Person
class,所以我真的不能提供更多关于如何做的细节,但这个描述应该足够了。
只是评论:让你的 Person
class(本质上是模型数据,即实体)保留对 XYChart.Series
的引用似乎有点奇怪的设计(这实际上是 UI 数据,充其量它属于视图模型)。实体应该真正不知道其中的数据是如何呈现的。最好在 Person
class 中恢复使用 java.util.List
,然后 "wiring" 从那里到其他地方的图表的数据。
我正在创建一个 javafx 健康程序,其中包含一个带有 XYChart.Series 参数的对象 Person。在调用我的 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 文件。
XYChart.Series
class 不是 Serializable
,因此当您尝试序列化任何包含它的对象作为其持久状态的一部分时,您将收到错误消息。您有几个选择:
- 不要保留图表数据。您可以通过将图表数据字段包含为
transient
来执行此操作
- 实施
Externalizable
而不是Serializable
。您将必须实施readExternal
和writeExternal
方法。这可能有点痛苦,因为您似乎有很多字段,但基本上您的writeExternal
方法会写入所有可序列化字段,然后写入图表数据的可序列化形式(例如,将数据写入一个ArrayList
)。readExternal
方法将读回数据(以相同的顺序)并从中重建字段值;对于图表数据,它将读取ArrayList
(例如)并从中构建图表数据。
你没有 post 你的 Person
class,所以我真的不能提供更多关于如何做的细节,但这个描述应该足够了。
只是评论:让你的 Person
class(本质上是模型数据,即实体)保留对 XYChart.Series
的引用似乎有点奇怪的设计(这实际上是 UI 数据,充其量它属于视图模型)。实体应该真正不知道其中的数据是如何呈现的。最好在 Person
class 中恢复使用 java.util.List
,然后 "wiring" 从那里到其他地方的图表的数据。