我如何使用Image
发送对象?我收到了这个错误:
java.io.NotSerializableException: org.eclipse.swt.graphics.Image
我可以发送普通对象,e。字符串或任何其他对象。
public void sentObject(Card GraczK) throws IOException
{
outt.writeObject(GraczK);
outt.flush();
System.out.print(GraczK);
}
CARD类型
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;
}
}
答案 0 :(得分:4)
我如何使用
Image
发送对象?
您无法序列化Image
。它通常会被吸引到"发件人的图形环境采用序列化无法处理的方式。
您需要做的是将img
字段标记为transient
。净效应将是接收者将null
视为值。如果需要,您可以通过从接收端的JAR或WAR(或其他地方)加载等效的Image
来(重新)填充该字段。 (这意味着为卡片的图像添加一个"名称"以便于图像加载是个好主意。)
您可以使用自定义readObject
/ writeObject
方法隐藏此内容,但可能需要将它们编码为与上面相同的内容......在引擎盖下。
您也可以(我猜)将Image
像素转换为字节数组,然后传输,并在另一端将像素重建为Image
。然而,这将使"消息臃肿"你发送,可能还有其他问题。所以我不推荐这个。
答案 1 :(得分:1)
您无法序列化图像,只需标记该字段瞬态。 如果仍想序列化它,那么替代方法是在您的类中添加另一个字段
private String imgBase64String; // Image to Base64 String.
将您的图片转换为Base64字符串。它可以序列化/反序列化。 Base64 String可以转换回Image。