2015-10-27 57 views
2

我怎樣才能發送對象Image?我得到這個錯誤:如何序列化包含圖像的對象?

java.io.NotSerializableException: org.eclipse.swt.graphics.Image 

我可以發送正常的對象,字符串或其他任何對象。

 public void sentObject(Card GraczK) throws IOException 
    { 

      outt.writeObject(GraczK); 
      outt.flush(); 
      System.out.print(GraczK); 

     } 

卡類型

public class Card implements Serializable { 
private int Value, Colour; 

private Image img; 

public Card(int i, int j) { 
    Colour = i; 
    Value = j; 
    img = new Image(null, MainWarSever.class.getResourceAsStream("/Karty/k" + Value + " (" + Colour + ").png")); 
} 

public int getValue() { 
    return Value; 
} 

public int getColour() { 
    return Colour; 
} 

public Image getImg() { 
    return img; 
} 

}

回答

4

How i can sent object with an Image ?

您不能序列的Image。它通常以串行化無法處理的方式「掛在」發送者的圖形環境中。

您需要做的是將img字段標記爲transient。淨效應將是接收者看到null作爲價值。如果需要,可以通過從接收端的JAR或WAR(或其他位置)加載等效的Image來重新填充字段。 (這意味着爲卡片圖像添加一個「名稱」以便於圖像加載將是一個好主意)。

您可以使用自定義readObject/writeObject方法來隱藏這個方法,但它們可能需要編碼做與上面一樣...在引擎蓋下。

你也可以(我猜)將Image像素變成一個字節數組,傳輸,並在另一端重建像素爲Image。但是,這會膨脹你正在發送的「消息」,並且可能還有其他問題。所以我不會推薦這個。

+0

偉大的傢伙!謝謝! – Pekus

1

您無法序列化圖像,只需標記該字段瞬變即可。 如果仍然要序列,然後選擇是另一個字段添加到您的類

private String imgBase64String; // Image to Base64 String. 

轉換圖像爲Base64編碼字符串。它可以是序列化/反序列化。 Base64字符串可以轉換回Image。

相關問題