我正在使用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时,这两种方法都运行良好。