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

Excepciones en SwingWorker

Estas en el tema de Excepciones en SwingWorker en el foro de Java en Foros del Web. Hola. Hace un tiempo escribí aquí unas dudas sobre el uso de clases que implementan SwingWorker y me ayudasteis mucho a solucionarlo, así que vuelvo ...
  #1 (permalink)  
Antiguo 20/02/2011, 08:49
 
Fecha de Ingreso: diciembre-2010
Mensajes: 8
Antigüedad: 13 años, 11 meses
Puntos: 1
Excepciones en SwingWorker

Hola. Hace un tiempo escribí aquí unas dudas sobre el uso de clases que implementan SwingWorker y me ayudasteis mucho a solucionarlo, así que vuelvo a la carga.
Ya tengo varias clases que implementan SwingWorker para mostrar barras de progreso y cosas por el estilo en mi interfaz gráfica, hasta ahí ningún problema. Esas clases no esperaban ningún tipo de excepción en la ejecución de doInBackground(), pero ahora tengo una clase nueva que si espera una excepción, y no se cómo manejarla.

Código Java:
Ver original
  1. public class CargaDeDatos extends SwingWorker<Boolean, Integer> {
  2.  
  3. @Override
  4.  protected Boolean doInBackground() throws GeoException {
  5.    //proceso...
  6.    geoCoordenadas = geoAddress.getCoordinate(); //Este método lanza la excepción GeoException.
  7.    //proceso...
  8.  }
  9.  
  10. @Override
  11.   protected void done() {
  12.     csvActual.setText("");
  13.     progreso.setValue(100);
  14.   }
  15.  
  16. }

Parto del código de arriba. Cuando tengo una GeoException doInBackGround() la reconoce (lo se porque si pongo un catch dentro la captura) pero que yo vea no la propaga a ningún lado, ¿a donde se supone que va esa excepción? Mi intención es que la excepcion se propague hasta la GUI para poder mostrar allí un mensaje de error (la excepción está relacionada con la conexión a internet).
He visto por internet que el manejo de excepciones en el método doInBackground no es sencillo, y también he mirado infinidad de posts que no entiendo del todo.
Alguno dice que hay que llamar a get() en el método done(), que quedaría de esta forma:

Código Java:
Ver original
  1. @Override
  2.   protected void done() {
  3.     try {
  4.       csvActual.setText("");
  5.       progreso.setValue(100);
  6.       get();
  7.     } catch (InterruptedException ex) {
  8.          cerrarConexion();
  9.          throw new RuntimeException(ex);
  10.      } catch (ExecutionException ex) {
  11.          cerrarConexion();
  12.          System.out.println("Entra en excepcion, causa: " + ex.getCause());
  13.          throw new RuntimeException(ex.getCause());
  14.      }
  15.   }

Pero ahí me surgen aún mas dudas. Puedo propagar un RuntimeException, pero estoy en las mismas, ¿donde se esta propagando?. Otro asunto es que no me deja hacer protected void done() throws GeoException{...} así que estoy propagando un RuntimeException cuando en realidad quiero propagar una GeoException.
Como podeis ver estoy bastante perdido, así que agradeceré mucho cualquier tipo de idea o indicacion.

Gracias por adelantado y un saludo

Etiquetas: excepciones
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 10:04.