我正在做小型遊戲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