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属性,但是有点太长,无法直接在这里发布