我正在为一个学校项目制作网络战舰游戏。GUI 具有一个 JButtons
用作游戏板的网格。当用户点击一个按钮时,它会调用sendShot()
下面的方法。此方法将他们的镜头发送到远程机器,远程机器检查它是命中还是未命中并返回结果。然后第一台机器接收该结果并相应地更新其 GUI。我在下面的代码正在执行此操作,但我的问题是直到另一台机器发送下一个镜头之后,GUI 才会更新。我猜这是因为我是recieveShot()
从sendShot()
方法内部调用的,但我不是 100% 清楚为什么,因为更新 GUI ( gp.ob.updateBoard(sr))
) 的方法是在之前调用的receiveShot()
。我在这里有什么误解?
此外,我觉得我这里的基本程序流方法有缺陷,receiveShot()
不应该从sendShot()
方法中调用。这个方案有什么明显的替代方案吗?
void sendShot(ShotAttempt sa){
try {
oos.writeObject(sa);
oos.flush();
System.out.println("shot fired");
ShotResult sr = (ShotResult)ois.readObject();
gp.ob.updateBoard(sr);
} catch (IOException | ClassNotFoundException e) {
System.out.println(e.printStackTrace());}
receiveShot();
}
void receiveShot(){
try{
ShotAttempt sa = (ShotAttempt)ois.readObject();
ShotResult sr = gp.db.acceptShot(sa);
oos.writeObject(sr);
oos.flush();
} catch (IOException | ClassNotFoundException e){e.printStackTrace();}
}