2015-12-02 39 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屬性,但有點太長,直接發佈在這裏。