0

を実施しました。 ObjectOutputStreamのは、オブジェクトの「プレーヤー」に保存され、この出力ストリームは、オブジェクト「プレーヤー」を書​​くが、それはそれはどのようにすることができ、「プレーヤー」Javaの持つNotSerializableExceptionが、私はSerializableを</p> <p>私のオブジェクト「プレーヤー」implemtents、ソケットと私のサーバーにオブジェクトを書き込もうが、私は持つNotSerializableExceptionがあるオブジェクトを記述しようとしていた場合、シリアライズ

package ch.tbz.robin.application; 
import ch.tbz.robin.model.Attack; 
import ch.tbz.robin.model.Player; 
import ch.tbz.robin.model.Session; 

import java.io.*; 
import java.net.SocketException; 

public class Game extends Thread implements Serializable{ 
    private Session session; 
    public Game(Session session) { 
     this.session = session; 
     player1 = null; 
     player2 = null; 
    } 
    private Player player1; 
    private Player player2; 

    public void run(){ 
     player1 = session.getPlayer1(); 
     player2 = session.getPlayer2(); 

     try { 

     System.out.println("here"); 
     player1.getOut().writeObject(player1); 
     player1.getOut().writeObject(player2); 
     player2.getOut().writeObject(player2); 
     player2.getOut().writeObject(player1); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     boolean notend = true; 
     while(notend) { 
      try { 

       Attack attack1 = (Attack) player1.getIn().readObject(); 
       Attack attack2 = (Attack) player2.getIn().readObject(); 

       player1.setHealth(player1.getHealth() - attack2.setDamage(player2.getDamage())); 
       player2.setHealth(player2.getHealth() - attack1.setDamage(player1.getDamage())); 

       if (player1.getHealth() < 0) { 
        notend = false; 
       } 
       if(player2.getHealth() < 0) { 
        notend = false; 
       } 

      player1.getOut().writeObject(attack1); 
      player1.getOut().writeObject(attack2); 
      player2.getOut().writeObject(attack2); 
      player2.getOut().writeObject(attack1); 

      } catch (SocketException e){ 
       System.out.println("user disconnected"); 
       notend = false; 
      } catch (ClassNotFoundException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 

を書くためにtrys例外ここ

package ch.tbz.robin.model; 

import java.io.*; 

import java.net.Socket; 

public class Player implements Serializable{ 

    private Socket socket; 
    private ObjectOutputStream out; 
    private ObjectInputStream in; 
    private String username; 
    private String password; 
    int id; 
    int level; 
    int health; 
    int xp; 
    int damage; 

    public void setSocket(Socket socket) { 
     this.socket = socket; 
     try { 

      out = new ObjectOutputStream(socket.getOutputStream()); 
      in = new ObjectInputStream(socket.getInputStream()); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    public ObjectOutputStream getOut() { 
     return out; 
    } 

    public ObjectInputStream getIn() { 
     return in; 
    } 

    public Socket getSocket() { 
     return socket; 
    } 

    public void setUsername(String username) { 
     this.username = username; 
    } 

    public void setHealth(int health) { 
     this.health = health; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public void setLevel(int level) { 
     this.level = level; 
    } 

    public void setXp(int xp) { 
     this.xp = xp; 
    } 

    public void setDamage(int damage) { 
     this.damage = damage; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 

    public String getUsername() { 
     return username; 
    } 

    public String getPassword() { 
     return password; 
    } 

    public int getLevel() { 
     return level; 
    } 

    public int getHealth() { 
     return health; 
    } 

    public int getXp() { 
     return xp; 
    } 

    public int getDamage() { 
     return damage; 
    } 
} 

をスローしていますこれを修正しますか? Playerで

+0

質問に出ている例外のスタックトレースを追加する必要があります。 –

答えて

0
private ObjectOutputStream out; 
private ObjectInputStream in; 

する必要があり、これらのフィールドはSerializableではありません。

transientにする必要があります。そうでない場合は、Playerから削除してください。

+0

ああ..私はクラス:しかし、ありがとう –

+0

私は一時的なものを追加する必要があるか分からなかった –

+0

あなたは例外が実際に言ったものを読んでいない。 – EJP

0

すべてのフィールドは、すでにあなたに言っています例外メッセージとしてシリアライズ

+0

ああ..私は唯一のクラスです:)、ありがとう –