JavaFX ObjectInputStream颜色保持为空

JavaFX ObjectInputStream颜色保持为空,javafx,objectinputstream,objectoutputstream,Javafx,Objectinputstream,Objectoutputstream,我将对象写入这样的文件 ObjectOutputStream objectOutputStream = new ObjectOutputStream( new FileOutputStream("Object" + level + ".txt")); edgeList = koch.getEdgeList(); for (Edge e : edgeList) { objectOutputStream.writeObject(e);

我将
对象写入这样的文件

ObjectOutputStream objectOutputStream = new ObjectOutputStream(
            new FileOutputStream("Object" + level + ".txt"));

    edgeList = koch.getEdgeList();
    for (Edge e : edgeList) {
        objectOutputStream.writeObject(e);
    }
边包含颜色:

import java.io.Serializable;
import javafx.scene.paint.Color;


public class Edge implements Serializable {

    public double X1, Y1, X2, Y2;
    transient public Color color;

    public Edge(double X1, double Y1, double X2, double Y2, Color color) {
        this.X1 = X1;
        this.Y1 = Y1;
        this.X2 = X2;
        this.Y2 = Y2;
        this.color = color;
    }
}
我正在使用javaFX,无法更改此设置。 我将颜色设置为瞬态,因为如果我不这样做,将导致序列化问题

现在我像这样读取objectfile:

FileInputStream streamIn = new FileInputStream("Object" + level + ".txt");
    ObjectInputStream objectinputstream = new ObjectInputStream(streamIn);
    int teller = 0;
    try {
        for (teller = 0; teller < i; teller++) {
            Edge edge = (Edge) objectinputstream.readObject();
            EdgeList.add(edge);
        }
    } catch (OptionalDataException e) {
        if (!e.eof) {
            throw e;
        }
    } finally {

        objectinputstream.close();

    }
FileInputStream streamIn=newfileinputstream(“对象”+level+.txt”);
ObjectInputStream ObjectInputStream=新ObjectInputStream(streamIn);
int-teller=0;
试一试{
对于(出纳员=0;出纳员

现在的问题是,当我从文件中读取边缘对象时,坐标(X1,Y1,X2,Y2)读取得很好。但是颜色为空,这不会导致错误,但它不会向绘制的线显示颜色。所以我没有任何错误代码。我必须手动设置颜色,但我应该从objectfile获取颜色

为您的
Edge
类使用自定义序列化表单:

import java.io.Serializable;
import java.io.ObjectInputStream ;
import java.io.ObjectOutputStream ;
import java.io.IOException ;
import javafx.scene.paint.Color;


public class Edge implements Serializable {

    public double X1, Y1, X2, Y2;
    transient public Color color;

    public Edge(double X1, double Y1, double X2, double Y2, Color color) {
        this.X1 = X1;
        this.Y1 = Y1;
        this.X2 = X2;
        this.Y2 = Y2;
        this.color = color;
    }

    private void writeObject(ObjectOutputStream s) throws IOException {
        s.defaultWriteObject();
        s.writeDouble(color.getRed());
        s.writeDouble(color.getGreen());
        s.writeDouble(color.getBlue());
        s.writeDouble(color.getOpacity());
    }

    private void readObject(ObjectInputStream s) throws IOException, ClassNotFoundException {
        s.defaultReadObject();
        double red = s.readDouble();
        double green = s.readDouble();
        double blue = s.readDouble();
        double opacity = s.readDouble();
        color = Color.color(red, green, blue, opacity);
    }
}
这将自动为您序列化颜色数据(rgba值),并在反序列化时从这些数据重新创建颜色对象

我创建了一个类似的方法,它还使用相同的技术序列化JavaFX属性,但是有点太长,无法直接在这里发布