Foros del Web » Programación para mayores de 30 ;) » Java »

Manejo de excepcion dentro de addActionListener

Estas en el tema de Manejo de excepcion dentro de addActionListener en el foro de Java en Foros del Web. Mi duda es la siguiente: Quiero lanzar una excepcion cuando el retiro de una cuenta sea mayor al saldo disponible. En el boton Retirar hago ...
  #1 (permalink)  
Antiguo 06/04/2010, 12:30
 
Fecha de Ingreso: abril-2010
Mensajes: 3
Antigüedad: 14 años, 8 meses
Puntos: 0
Manejo de excepcion dentro de addActionListener

Mi duda es la siguiente:

Quiero lanzar una excepcion cuando el retiro de una cuenta sea mayor al saldo disponible.

En el boton Retirar hago lo siguiente:

btnRetirar.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e)throws RetiroException
{
double saldo=MappedCuentas.obtenerSaldo(Integer.parseInt( txtId.getText()));
double retiro = Double.parseDouble(txtRetiro.getText());
lblSaldoAnteriorDato.setText(String.valueOf(saldo) );
if(retiro <= saldo)
{
saldo = saldo - retiro;
lblSaldoActualDato.setText(""+saldo);
MappedCuentas.guardarCuenta(Integer.parseInt(txtId .getText()),saldo);
}
else
{
throw new RetiroException("NO SE PUEDE REALIZAR EL RETIRO");
}
}
});

mi Clase RetiroException:

public class RetiroException extends Exception
{


public RetiroException(String mensaje)
{
super(mensaje);
}


}

me sale el siguiente error:

actionPerformed(java.awt.event.actionEvent) n cannot implement actionPerformed (java.awt.event.actionEvent) in java.awt.event.actionListener; overridden method does not throw RetiroException

Quisiera saber que estoy haciendo mal o si no es posible lanzar la excepción que quiero.. Soy novato en java

MUCHAS GRACIAS!!!!
  #2 (permalink)  
Antiguo 06/04/2010, 14:12
Avatar de pablor21  
Fecha de Ingreso: noviembre-2008
Ubicación: Montevideo - Uruguay
Mensajes: 197
Antigüedad: 16 años, 1 mes
Puntos: 13
Respuesta: Manejo de excepcion dentro de addActionListener

hola! no puedes lanzar una exception desde un método que sobreescribes si el método original no declara que lanza esta exception...
Lo mejor sería sacar lo que va a hacer el método y ponerlo de un método aparte, y luego desde el addActionListener sólo llamar al método que has creado...
__________________
Desarrolloador Freelance - http://www.mvdit.com.uy
  #3 (permalink)  
Antiguo 07/04/2010, 02:54
 
Fecha de Ingreso: enero-2009
Mensajes: 26
Antigüedad: 15 años, 11 meses
Puntos: 4
Respuesta: Manejo de excepcion dentro de addActionListener

Como dice pablor21:

Cita:
Iniciado por pablor21 Ver Mensaje
no puedes lanzar una exception desde un método que sobreescribes si el método original no declara que lanza esta exception...
Lo que sí puedes hacer (otra cosa es que quede bonito ;) es modificar tu excepción para que se lance en tiempo de ejecución:

public class RetiroException extends RuntimeException......

Pd: No olvides quitar el throws RetiroException del actionPerformed.
  #4 (permalink)  
Antiguo 07/04/2010, 04:25
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 21 años, 2 meses
Puntos: 51
Respuesta: Manejo de excepcion dentro de addActionListener

Declarar la Excepcion como de tipo Runtime soluciona el problema desde el punto de vista de compilación, pero no sóluciona el problema real, que es dar salida a "¿que hacemos cuando ocurre esa excepción?". Si la convertimos en RuntimeException lo único que conseguiremos será que la excepción salte sin ser tratada ni detectada por el programa.

Y llamar a otro método de hecho tampoco cambia la circunstancia de que tenemos que tratar esa excepción, si no la tratamos en el handler lo tendremos que hacen en el otro método pero al fin y al cabo: tratarla.

En realidad el problema global es que lanzar una excepción ahí no tiene sentido, lo que tienes que hacer es tratar el problema, no lanzar una excepción por que no hay nadie para "recogerla".

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #5 (permalink)  
Antiguo 07/04/2010, 10:49
 
Fecha de Ingreso: abril-2010
Mensajes: 3
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Manejo de excepcion dentro de addActionListener

MUCHAS GRACIAS POR SU AYUDA:

Para solucionar el problema elimine el throws del actionPerformed y cree un metodo llamado retirar he hice lo siguiente:

btnRetirar.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
double saldo = MappedCuentas.obtenerSaldo(Integer.parseInt(txtId. getText()));
double retiro = Double.parseDouble(txtRetiro.getText());
lblSaldoAnteriorDato.setText(String.valueOf(saldo) );
try
{
retirar(retiro, saldo);
}
catch(RetiroException re)
{
lblMensaje.setText(re.getMessage());
d.add(lblMensaje);
d.setTitle("Se produjo una excepción");
d.setSize(200,200);
d.setVisible(true);

}
}
});

Cree un Jdialog llamado d y una Label lblMensaje para mostar el mensaje de excepción y el metodo retirar quedo asi:

public void retirar(double retiro, double saldo) throws RetiroException
{
if(retiro <= saldo)
{
saldo = saldo - retiro;
lblSaldoActualDato.setText(""+saldo);
MappedCuentas.guardarCuenta(Integer.parseInt(txtId .getText()),saldo);
}
else
{
throw new RetiroException("NO SE PUEDE REALIZAR EL RETIRO");
}
}

Agradecería me dijeran si esta solucion es óptima o si hay una mejor solucion...

GRACIAS Y QUE DIOS LOS BENDIGA!!!!!
  #6 (permalink)  
Antiguo 07/04/2010, 11:06
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 21 años, 2 meses
Puntos: 51
Respuesta: Manejo de excepcion dentro de addActionListener

De hecho, modificar la interfaz no se debería hacer desde los gestores de eventos, ya que estas en el Thread de tratamiento de eventos y mientras toqueteas el GUI, el programa parece colgado. Investiga el uso de SwingWorker para que esto no te ocurra. Por ejemplo:

http://mundojava.blogspot.com/2006/1...orker-con.html
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.

Etiquetas: excepcion, manejo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:43.