Un evento inesperado que ocurre durante la ejecución del programa se llama Excepción . Esto puede deberse a varios factores, como una entrada de usuario no válida, fallas en la red, limitaciones de memoria, tratar de abrir un archivo que no existe, etc.
Si ocurre una excepción, se genera un objeto Exception, que contiene el paradero, el nombre y el tipo de la excepción. Esto debe ser manejado por el programa. Si no se controla, pasa al controlador de excepciones predeterminado, lo que da como resultado una terminación anormal del programa.
Argumento de excepción ilegal
IllegalArgumentException es una subclase de java.lang.RuntimeException. RuntimeException, como sugiere el nombre, ocurre cuando el programa se está ejecutando. Por lo tanto, no se comprueba en tiempo de compilación.
IllegalArgumentException Causa
Cuando a un método se le pasan argumentos ilegales o inadecuados, se lanza una IllegalArgumentException.
El programa a continuación tiene un hilo separado que hace una pausa y luego intenta imprimir una oración. Esta pausa se logra utilizando el método de suspensión que acepta el tiempo de pausa en milisegundos. Java define claramente que este tiempo debe ser no negativo. Veamos el resultado de pasar un valor negativo.
Programa para demostrar IllegalArgumentException:
Java
// Java program to demonstrate IllegalArgumentException public class Main { public static void main(String[] args) { // Create a simple Thread by // implementing Runnable interface Thread t1 = new Thread(new Runnable() { public void run() { try { // Try to make the thread sleep for -10 // milliseconds Thread.sleep(-10); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println( "Welcome To GeeksforGeeks!"); } }); // Name the thread as "Test Thread" t1.setName("Test Thread"); // Start the thread t1.start(); } }
Producción:
Exception in thread "Test Thread" java.lang.IllegalArgumentException: timeout value is negative at java.base/java.lang.Thread.sleep(Native Method) at Main$1.run(Main.java:19) at java.base/java.lang.Thread.run(Thread.java:834)
En el caso anterior, la Excepción no fue detectada. Por lo tanto, el programa finalizó abruptamente y se imprimió el Stack Trace que se generó.
Diagnóstico y solución
Stack Trace es el último recurso para investigar la causa raíz de los problemas de excepción. El Stack Trace anterior se puede desglosar de la siguiente manera.
Parte 1: esta parte nombra el subproceso en el que se produjo la excepción. En nuestro caso, la Excepción ocurrió en el «Hilo de prueba».
Parte 2: esta parte nombra la clase de la excepción. En el ejemplo anterior se crea un objeto de excepción de la clase «java.lang.IllegalArgumentException».
Parte 3: Esta parte establece la razón detrás de la ocurrencia de la Excepción. En el ejemplo anterior, la excepción se produjo porque se utilizó un valor de tiempo de espera negativo ilegal.
Parte 4: esta parte enumera todas las invocaciones de métodos que conducen a la ocurrencia de la excepción, comenzando con el método donde ocurrió la excepción por primera vez. En el ejemplo anterior, la excepción ocurrió por primera vez en el método Thread.sleep() .
Del análisis anterior, llegamos a la conclusión de que se produjo una IllegalArgumentException en el método Thread.sleep() porque se pasó un valor de tiempo de espera negativo. Esta información es suficiente para resolver el problema. En consecuencia, hagamos cambios en el código anterior y pasemos un valor de tiempo de espera positivo.
A continuación se muestra la implementación del enunciado del problema:
Java
// Java program to demonstrate Solution to // IllegalArgumentException public class Main { public static void main(String[] args) { // Create a simple Thread by // implementing Runnable interface Thread t1 = new Thread(new Runnable() { public void run() { try { // Try to make the thread sleep for 10 // milliseconds Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println( "Welcome To GeeksforGeeks!"); } }); // Name the thread as "Test Thread" t1.setName("Test Thread"); // Start the thread t1.start(); } }
Welcome To GeeksforGeeks!