Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > No me captura RuntimeException

Buenas de nuevo
En el siguiente código no consigo que me capture la runtimeexception que estoy forzando al no existir la clase LabelImagenFondoMenu. En lugar de capturarla y mostrarme un showMessage con la información que le paso directamente me saca el error en el "output" de java...
public TableroMenu()
{

try
{
FramePantalla pantallaMenu = new FramePantalla();
LabelImagenFondoMenu imagenFondoMenu = new LabelImagenFondoMenu();
PanelOpcionesMenu opcionesMenu = new PanelOpcionesMenu();

pantallaMenu.add(opcionesMenu);
pantallaMenu.add(imagenFondoMenu);

pantallaMenu.setVisible(true);
}
catch(RuntimeException re)
{
ControlExcepciones.Excepciones(re, "a", "a");
System.exit(0);
}

}

Alguien sabe que estoy haciendo mal??
Gracias. Saludos.

agosto 6, 2016 | Unregistered CommenterAbel

¿No te lanzará una NullPointerException?

agosto 6, 2016 | Registered Commenterchoces

Me manda una ExceptionInInitializerError, que es exactamente la que estoy forzando al cambiar de nombre la clase para que no la encuentre.

agosto 7, 2016 | Unregistered CommenterAbel

https://docs.oracle.com/javase/8/docs/api/java/lang/ExceptionInInitializerError.html

"Signals that an unexpected exception has occurred in a static initializer. An ExceptionInInitializerError is thrown to indicate that an exception occurred during evaluation of a static initializer or the initializer for a static variable."

La traza de la excepción debería señalarte la línea de código donde se produce, lo que no se puede ver en lo que has publicado.

agosto 7, 2016 | Registered Commenterchoces

Dentro del try, la segunda línea.
LabelImagenFondoMenu imagenFondoMenu = new LabelImagenFondoMenu();
Ya que para que me de el error modifico el nombre del archivo que tiene la clase. Lo pongo como LabelImagenFondoMenu2 para que no lo encuentre y de el error.
El problema es que estando dentro del bloque try-catch no lo detecta y me da el error en el output de netbeans en lugar de el mssgbox que le indico en la excepción.

agosto 8, 2016 | Unregistered CommenterAbel

Es que la excepción que te lanza no es RuntimeException sino ExceptionInInitializerError: son dos clases distintas, y solo están relacionadas entre sí porque ambas heredan de Throwable.

agosto 8, 2016 | Registered Commenterchoces

Pero ExceptionInInitializerError no es una runtimeexception?
Igualmente, sea una u otra no ma captura dentro del try-catch

agosto 8, 2016 | Unregistered CommenterAbel

Que ExceptionInInitializerError sea una excepción que se lanza en ejecución no es lo mismo que sea del tipo RuntimeException: son dos clases diferentes
En tu código pides que capture las excepciones del tipo RuntimeException, luego si no se lanza ninguna de este tipo, el código dentro del catch no se ejecuta.

Echa un ojo a los Javadocs:
https://docs.oracle.com/javase/8/docs/api/java/lang/ExceptionInInitializerError.html
https://docs.oracle.com/javase/8/docs/api/java/lang/RuntimeException.html

Me da la impresión de que no comprendes bien como funciona un bloque try..catch
https://docs.oracle.com/javase/tutorial/essential/exceptions/handling.html
https://docs.oracle.com/javase/tutorial/essential/exceptions/catch.html

"Each catch block is an exception handler that handles the type of exception indicated by its argument. The argument type, ExceptionType, declares the type of exception that the handler can handle and must be the name of a class that inherits from the Throwable class."

agosto 8, 2016 | Registered Commenterchoces

Gx choces...
Con lo que me has dicho he comprobado que no es una excepción, sino un error, por eso aun que quería capturar excepciones a secas tampoco la pillaba.
Gracias. Solucionado.

agosto 9, 2016 | Unregistered CommenterAbel