2010-06-14 17 views
8

Estoy creando un código de varios subprocesos y he creado una clase JobDispatcher que crea subprocesos. Quiero que este objeto para manejar las excepciones no controladas en los subprocesos de trabajo, y por lo que estoy usandoCómo simular una excepción no controlada en Java

Thread.setUncaughtExceptionHandler(this); 

Ahora, me gustaría probar esta funcionalidad - ¿Cómo puedo generar una excepción no controlada en el método run() de mi objeto trabajador?

Respuesta

14

Solo eche una excepción.

ej .:

throw new RuntimeException("Testing unhandled exception processing."); 

completo:

public class RuntimeTest 
{ 
    public static void main(String[] a) 
    { 
    Thread t = new Thread() 
    { 
     public void run() 
     { 
     throw new RuntimeException("Testing unhandled exception processing."); 
     } 
    }; 
    t.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() 
    { 
     public void uncaughtException(Thread t, Throwable e) 
     { 
     System.err.println(t + "; " + e); 
     } 
    }); 
    t.start(); 
    } 
} 
+0

Eclipse no me deja compilar cuando hago esto - se insiste Me rodeo con try/catch. ¿Sabes cómo cambiar este comportamiento? –

+1

Debe compilar. Parece un cheque extra específico de Eclipse. –

+1

Eclipse podría quejarse si tiene otro código en un método después del lanzamiento de la excepción, hacerla la única/última línea en el método en que se encuentra. – Alb

5

Cuál es el problema con sólo una excepción:

throw new Exception("This should be unhandled"); 

Dentro de su método run. Y por supuesto, no captarlo. Debería activar tu controlador.

4

Debe lanzar excepción no comprobada. Una excepción no verificada no requiere que su código lo maneje, y por lo tanto es un buen candidato para recorrer la pila de llamadas.

Puede elegir RuntimeException por ejemplo, o incluso algo parecido a AssertionError, si desea reducir al mínimo las posibilidades de que alguna parte del código captura la excepción y se ocupa de que antes de que llegue a su manejador.

0

sólo tiene que añadir este código y obtendrá una excepción no controlada y sin pelusa de error:

int i = 1/0; 
Cuestiones relacionadas