Java 知道客户端何时调用远程对象RMI

Java 知道客户端何时调用远程对象RMI,java,swing,rmi,remoteobject,Java,Swing,Rmi,Remoteobject,我正在使用RMI制作一个JavaSwing应用程序,我想知道客户机何时调用服务器的一个方法,以便其他客户机得到更新。 更具体地说,我正在用JavaSwing制作一个tic-tac-toe游戏,我有一个服务器和两个客户端,我希望当一个客户端移动时,它板上的另一个客户端得到新的移动。下面是当一个客户端按下按钮在一个客户端上移动时发生的情况 private void btn11ActionPerformed(java.awt.event.ActionEvent evt) {

我正在使用RMI制作一个JavaSwing应用程序,我想知道客户机何时调用服务器的一个方法,以便其他客户机得到更新。 更具体地说,我正在用JavaSwing制作一个tic-tac-toe游戏,我有一个服务器和两个客户端,我希望当一个客户端移动时,它板上的另一个客户端得到新的移动。下面是当一个客户端按下按钮在一个客户端上移动时发生的情况

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个客户端,如果第三个客户端试图建立连接,我会拒绝它

如果有任何帮助,我将不胜感激,我已经寻找答案一段时间了,但我什么也没找到。。这是我最后的选择


另外,我希望我说清楚,英语不是我的第一语言,我不知道这是否是正确的方法,但为了解决我的问题,我在两个客户端上都使用计时器,所以每次客户端检查服务器上的更新,因此,如果有客户机,客户机会得到更新,并在另一个客户移动时显示他们知道的外观。这对我来说是个骗局