java的notserializableexception但实现序列化

java的notserializableexception但实现序列化

问题描述:

我试着对象写信给我带插座的服务器,java的notserializableexception但实现序列化

我的目标“玩家” implemtents序列化,但如果我尝试写对象有一个notserializableexception。用ObjectOutputStream保存在对象“玩家”,这为OutputStream写入对象“玩家”,但它抛出一个异常

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; 
    } 
} 

这里改掉写的“玩家”

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(); 
      } 
     } 
    } 
} 

我怎么能解决这个问题?

+0

您应该将正在获取的异常的堆栈跟踪添加到问题中。 –

private ObjectOutputStream out; 
private ObjectInputStream in; 

由于异常消息将已经告诉你了,这些字段不可序列化。

您需要将它们制作成transient,或者更有可能将它们从Player中移除到其他地方。

+0

啊..我虽然只有班:),谢谢 –

+0

我不知道我必须添加短暂 –

+0

你没有读过什么异常实际上说。 – EJP

在播放器的所有字段必须是一个序列化

+0

啊..我虽然只有班:),谢谢 –