Excepciones

Estoy programando en java y necesito saber si después de que se lanza una excepción un programa puede seguir ejecutándose es decir que después del catch salga el mensaje de error y en vez de que termine el programa pueda seguir ejecutándose sin ningún problema.
Me gustaría que me mandaras un ejemplo si de pronto lo tienes.
Respuesta
1
Por lo que me preguntas parece que tu usas o has usado más visual basic, y lo que quieres es una especie de "Resume" o "Resume Next".
Bueno, en Java esto no existe de esta forma, para "simularlo" tienes que capturar las excepciones en la misma linea donde crees que va a ocurrir, es decir:
lineas de codigo;
...
try {
linea con posible error;
} catch (excecionAControlar e) {
mesnajeOLineaDeError;
}
...
más lineas de código;
De esta forma si se produce un error, se ejecuta el catch, y el programa continua con el resto de lineas. Puedes tener tantos controles de error anidados como desees y tantas veces como quieras.
Tengo un ejemplo, pero quizás sea algo largo para enviártelo aquí, si me das una dirección te lo envío con mucho gusto.
Hola!
Recibí tu respuesta y me seria de mucha ayuda si me mandas ese ejemplo de excepciones ya que he estado probando y siempre que lanzo la excepción el programa se finaliza así ponga el resto del código dentro catch. Este es el método main del programa que estoy haciendo con excepciones:
public static void main(java.lang.String[] args) {
TreeMap zonas = new TreeMap();
int menu1 , menu2;
try{
do{
menu1=Menus.menuPrinc();
switch (menu1) {
case 1 :
menu2=Menus.menuzonas();
switch (menu2) {
case 1 :
EntradaSalidaDatos.crearPais(zonas);
break;
case 2 :
EntradaSalidaDatos.crearDepartamento(zonas);
break;
case 3 :
EntradaSalidaDatos.crearMunicipio(zonas);
break;
case 4:
break;
default :
System.out.println("la opcion no existe");
}
break;
case 2 :
EntradaSalidaDatos.consultar(zonas);
break;
case 3 :
break;
default :
System.out.println("la opcion no existe");
}
}while(menu1!=3);
}catch(ZonaExistente ec){
System.out.println("error");
}
Muchas gracias por tu ayuda aquí te mando mi email:
[email protected]
Veo en tu código que el problema esta en donde tratas el error. Como el 'catch' esta fuera del bucle while, cuando se produce una excepción el flujo del programa salta fuera del bucle, con lo cual se termina la ejecución.
Prueba a colocarlo dentro, es decir:
public static void main(java.lang.String[] args) {
TreeMap zonas = new TreeMap();
int menu1 , menu2;
do{
try {
menu1=Menus.menuPrinc();
switch (menu1) {
case 1 :
...
default :
System.out.println("la opcion no existe");
}
} catch(ZonaExistente ec){
System.out.println("error");
}
}while(menu1!=3);
}
De esta forma si existe un error, el flujo pasará al tratamiento de errores y una vez realizado el tratamiento continua dentro del bucle while.
Te envío el ejemplo a tu mail.

2 respuestas más de otros expertos

Respuesta
1
Efectivamente cuando tú atrapas una excepción con un catch, el programa sigue ejecutándose normalmente, porque tú has hecho el trabajo de tratar esa excepción. Por ejemplo
public class Prueba{
public static void main(String args[]){
System.out.println("1/0=");
try{
int result=1/0;
System.out.println("El resultado es "+result);
}
catch(Exception e){
System.out.println("El resultado es infinito");
}
System.out.println("El programa continua correctamente");
}
}
Cuando compiles y ejecutes esto verás que pone directamente "El resultado es infinito" y luego "El programa continua correctamente", es decir, que si tú no indicas que el programa finalice su ejecución (con System. exit() ), el programa continuará ejecutandose. Lo único que tienes que hacer es poner dentro del catch lo que quieres que haga si se ha generado la excepción (para no concurrir en resultados erróneos).
Respuesta
1
Por supuesto que se puede, ya que sino no tendrían mucho sentido. Una forma de hacerlo es mediante la instrucción finally, te mostraré un ejemplo:
public class Excepciones {
public static void main(String[] args) {
String palabra = "hola";
try {
int numero = Integer.parseInt(palabra);
} catch (NumberFormatException e) {
System.out.println("Se ha lanzado la excepcion");
} finally {
/*
* Cuando se produce una excepción todo lo que va
* en el finally se ejecuta
*/
System.out.println("El programa continua despues de la excepcion");
}
}
}
Otra forma de hacerlo es mediante un bucle do... while. De tal forma que si se produce una excepción se sale del bucle y en caso contrario no, también se podría hacer de forma inversa, es decir, si se produce una excepción se sale del bucle y en caso contrario no. Bueno, aquí está el ejemplo:
import java.io.*;
public class Excepciones2 {
public static void main(String[] args) {
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader buf = new BufferedReader(isr);
boolean salir = true;
do {
try {
System.out.println("Introduce una palabra para" +
"lanzar una excepcion: ");
String palabra = buf.readLine();
int numero = Integer.parseInt(palabra);
} catch (Exception e) {
System.out.println("Se ha producido una excepción");
salir = false;
}
} while (salir);
System.out.println("El programa puede continuar");
}
}

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas