JOptionPane.showMessage在RMI应用程序中挂起

时间:2016-07-03 16:34:45

标签: java swing model-view-controller rmi joptionpane

我正在使用RMI实现客户端 - 服务器应用程序,当我在客户端捕获异常时,我得到一个空白消息对话框。代码如下:

在观察者的更新方法中:

@Override
public void actualizar(ObservableRemoto origen, Serializable param) throws RemoteException {
if (param.equals(Modelo.EVENTO_CHECK_SALDOS)){
        try {
            jugador = mesa.buscarJugador(jugador.getJugador());
            jugador.expulsado();
        } catch (InvalidUserActionException ex) {
            vista.cerrarVentana(ex.getMessage());
            salirDeMesa();
        } 
    }

此控制器视图中的cerrarVentana()方法:

@Override
public void cerrarVentana(String msj) {
    JOptionPane.showMessageDialog(this, msj);
    dispose();
}

调用此方法时,消息对话框显示为空白并挂起。另一方面,当我使用在显示的同一视图中触发的其他方法调用JOptionPane时,JOptionPane工作正常。它在cerrarVentana()

的相同视图中编码如下
@Override
public void actionPerformed(ActionEvent e) {
    BotonRuleta origen = (BotonRuleta)e.getSource();
    Numero n = origen.getNumero();
    try{
        String sMonto = top.obtenerApuesta();
        controlador.apostar("Pleno " + n.getValor(), n, sMonto); // change heree
        controlador.mostrarNum();

    } catch (RemoteException ex) {
        Logger.getLogger(VistaMesaV1.class.getName()).log(Level.SEVERE, null, ex);
    }
    catch (InvalidUserActionException ex){
        JOptionPane.showMessageDialog(this, ex.getMessage());
    }
}

我想知道这两个JOptionPane调用之间的区别是什么,除了一个从控制器调用而另一个从视图调用,以及如何修复第一个示例。 需要注意的一点是,在此应用程序的先前版本中,当我还没有实现RMI时,这两种方法都运行良好。

0 个答案:

没有答案