2010-06-14 2 views
8

Я создаю многопоточный код, и я создал класс JobDispatcher, который создает потоки. Я хочу, чтобы этот объект для обработки любых необработанных исключений в рабочих потоках, и поэтому я используюКак имитировать необработанное исключение в Java

Thread.setUncaughtExceptionHandler(this); 

Теперь я хотел бы проверить эту функциональность - как я могу генерировать необработанное исключение в методе Run() из мой рабочий объект?

ответ

14

Просто выбросьте любое исключение.

т.д .:

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

Complete:

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, не позволит мне скомпилировать, когда я это делаю - это настаивает, чтобы я окружит Try/уловом. Вы знаете, как изменить это поведение? –

+1

Он должен скомпилировать. Похож на некоторую дополнительную проверку Eclipse. –

+1

Eclipse может жаловаться, если у вас есть другой код в методе после выброса исключения, сделайте его единственной/последней строкой в ​​методе, в котором он находится. – Alb

5

В чем проблема с просто бросали исключение:

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

Внутри вашего метода выполнения. И, конечно, не поймать его. Это должно вызвать ваш обработчик.

4

Необходимо исключить исключение . Неконтролируемое исключение не требует, чтобы ваш код обрабатывал его, и, следовательно, является хорошим кандидатом для полного завершения стека вызовов.

Вы можете выбрать RuntimeException, например, или даже что-то вроде AssertionError, если вы хотите, чтобы свести к минимуму вероятность того, что какая-то часть кода перехватывает исключение и обрабатывает его, прежде чем он достигнет обработчика.

0

просто добавить этот код, и вы получите необработанное исключение без ошибок ворса:

int i = 1/0; 
Смежные вопросы