2015-12-02 25 views
0

我写<Edge>对象添加到文件中像这样JavaFX的ObjectInputStream的颜色保持空

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和无法改变这一点。 我做了颜色暂态,因为如果我没有这样做,会导致Serializable的麻烦。

现在我读这样的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(); 

    } 

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

回答

0

使用自定义序列化形式为您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的值)为你,并重新从反序列化这些数据的颜色对象。

我创建了一个complete demo这也是使用相同的技术序列化JavaFX属性,但有点太长,直接发布在这里。