XYChart.Series没有在javafx中序列化

时间:2015-02-18 03:36:26

标签: javafx javafx-8

我正在创建一个带有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文件。

1 个答案:

答案 0 :(得分:1)

XYChart.Series类不是Serializable,因此当您尝试将包含该对象的任何对象序列化为其持久状态时,您将收到错误。你有几个选择:

  1. 不要保留图表数据。您可以通过将图表数据字段包含为transient
  2. 来完成此操作
  3. 实施Externalizable而不是Serializable。您必须实施readExternalwriteExternal方法。这可能有点痛苦,因为你似乎有很多字段,但基本上你的writeExternal方法会编写所有可序列化的字段,然后写一个可序列化的图表数据形式(例如写入数据) ArrayList)。 readExternal方法将数据读回(以相同的顺序)并从中重新构造字段值;对于图表数据,它将读取ArrayList(例如)并从中构建图表数据。
  4. 您没有发布Person课程,因此我无法详细说明如何操作,但该说明应该足够了。

    只是一个评论:让Person类(本质上是模型数据,即实体)保持对XYChart.Series的引用(这实际上是UI数据)似乎有点奇怪的设计,它最多属于View-Model)。实体应该真正了解其中的数据是如何呈现的。最好恢复使用java.util.List类中的Person,并将数据从那里“连接”到您的图表中。