1

データ転送に Serializable を使用しています。以下は、Serializable からの私のクラスの実装です。

public class UserAction implements Serializable{

/**
 *
 */
private static final long serialVersionUID = 1L;

public int userID;
public transient Path path;
public transient Paint paint;

public UserAction(){
    path = new Path();
    paint = new Paint();
}

public UserAction(int ID, Path path, Paint paint){
    setUserID(ID);
    setPath(path);
    setPaint(paint);
}

public void setUserID(int ID){
    this.userID = ID;
}

public void setPath(Path path){
    this.path.set(path);
}

public void setPaint(Paint paint){
    this.paint.set(paint);
}

}

そして、このような OutputStream :

 client = new Socket("localhost", 54321);
 ObjectOutputStream out = new ObjectOutputStream(client.getOutputStream());
 out.writeObject(action);
 out.close();
 client.close();

入力ストリームは次のとおりです。

 ObjectInputStream in = new ObjectInputStream(client.getInputStream());
 rec_action = (UserAction) in.readObject();
 in.close();

しかし、入力ストリームから取得した rec_action を使用している間。rec_action は Null ではありませんが、メンバー パスとペイントは両方とも NULL です。java.lang.NullPointerExceptionを取得します。

4

1 に答える 1

0

transientシリアライゼーションがそれらをスキップするように、それらのメンバーをマークしました。それがそのキーワードの定義です。

于 2012-11-10T02:58:10.960 に答える