我正在做小型游戏Tron自行车。Java通过线程中的套接字发送对象
我MainFrame类
Bike bike1, bike2;
private void startGameAsServer(){
bike1 = new Bike();
bike2 = new Bike();
communication.sendBike(bike1);
communication.sendBike(bike2);
}
...
public synchronized void receiveBike(Bike receive){
//depends if I'm server or client I save receive to bike1 or bike2
}
...
二等通信
...
ObjectOutputStream output = new ObjectOutputStream(client.getOutputStream());
ObjectInputStream input = new ObjectInputStream(client.getInputStream());
...
public void sendBike(Bike send){
try {
output.writeObject(send);
output.flush();
System.out.println("Send bike");
} catch (IOException ex) {
}
}
...
private void listen(){
listening = new Thread(new Runnable() {
@Override
public void run() {
while(true){
try {
Bike readBike = (Bike)input.readObject();
System.out.println("Receive bike");
MainFrame.getInstance().receiveBike(readBike);
} catch (IOException | ClassNotFoundException ex) {
break;
}
}
}
});
listening.start();
}
...
当我开始比赛,它工作正常。在服务器上,两个自行车都会创建,发送给客户端,然后开始游戏。但是当我在客户端转向另一端时,我会将一辆自行车送回服务器,这是问题。
在服务器中的方法receiveBike bike1和bike2是空的...如果我写信给bike1或bike2什么都没有发生。即使在很短的时间内,骑自行车1和自行车2的数据也被加载以绘制游戏面板。看起来,这些数据是从旧对象加载的。
如同方法receiveBike我们改变了完全不同的对象......我很绝望,我不知道我做错了什么......
为什么sendBike()是静态的?你可以发布这种方法的代码? run()方法中的输入是什么? – JosefN
'startGameAsServer()'的第四行,你的意思是bike2,而不是bike1? – asaini007
对不起,编辑。是的,我的意思是bike2,sendBike不是静态的,应该有小的'c'连接... – Arxeiss