Java 知道客户端何时调用远程对象RMI
我正在使用RMI制作一个JavaSwing应用程序,我想知道客户机何时调用服务器的一个方法,以便其他客户机得到更新。 更具体地说,我正在用JavaSwing制作一个tic-tac-toe游戏,我有一个服务器和两个客户端,我希望当一个客户端移动时,它板上的另一个客户端得到新的移动。下面是当一个客户端按下按钮在一个客户端上移动时发生的情况Java 知道客户端何时调用远程对象RMI,java,swing,rmi,remoteobject,Java,Swing,Rmi,Remoteobject,我正在使用RMI制作一个JavaSwing应用程序,我想知道客户机何时调用服务器的一个方法,以便其他客户机得到更新。 更具体地说,我正在用JavaSwing制作一个tic-tac-toe游戏,我有一个服务器和两个客户端,我希望当一个客户端移动时,它板上的另一个客户端得到新的移动。下面是当一个客户端按下按钮在一个客户端上移动时发生的情况 private void btn11ActionPerformed(java.awt.event.ActionEvent evt) {
private void btn11ActionPerformed(java.awt.event.ActionEvent evt) {
try{
int turno = stub.getTurno();
int resultado = stub.tirar(1, 1);
hacerTablero(stub.getPosiciones());
if (resultado != 3){
if (turno == 1){
lblJugador.setText("Turn of player 2");
}else{
lblJugador.setText("Turn of player 1");
}
if(resultado == 1 || resultado == 2){
if (resultado == 1){
if (turno == 1)
JOptionPane.showMessageDialog(this, "Player 1 wins");
else
JOptionPane.showMessageDialog(this, "Player 2 wins");
} else
JOptionPane.showMessageDialog(this, "It's a tie");
InterfazGato nuevo=new InterfazGato();
nuevo.setVisible(true);
this.dispose();
}
} else {
JOptionPane.showMessageDialog(this, "This place is taken");
}
}catch(RemoteException | HeadlessException e){
System.out.println(Exception from the remote method: " + e.getMessage());
}
}
排队
int resultado = stub.tirar(1, 1);
我在服务器端调用远程对象的方法,这里是这个方法
public int tirar(int x, int y) throws RemoteException{
if (gato[x-1][y-1] == 0){
if (turno == 1){
gato[x-1][y-1] = 1;
if (ganar()== 1){
reiniciar();
return 1;
} else if (ganar() == 2){
reiniciar();
return 2;
}
turno = 2;
}
else{
gato[x-1][y-1] = 2;
if (ganar()== 1){
reiniciar();
return 1;
} else if (ganar() == 2){
reiniciar();
return 2;
}
turno = 1;
}
} else
return 3;
return 0;
}
每次调用tirar(int,int)方法时,它都会检查远程对象上的矩阵以及玩家所做的移动和位置。
ganar()的方法是知道游戏何时结束,如果没有结束它将返回0,如果有人赢了它将返回1,如果是平局它将返回2
另一方面,我仍然不知道有多少客户端被连接,我希望是2个,如果有一个客户端应用程序等待到2个客户端,如果第三个客户端试图建立连接,我会拒绝它
如果有任何帮助,我将不胜感激,我已经寻找答案一段时间了,但我什么也没找到。。这是我最后的选择
另外,我希望我说清楚,英语不是我的第一语言,我不知道这是否是正确的方法,但为了解决我的问题,我在两个客户端上都使用计时器,所以每次客户端检查服务器上的更新,因此,如果有客户机,客户机会得到更新,并在另一个客户移动时显示他们知道的外观。这对我来说是个骗局