Обработка исключений Java - PullRequest
2 голосов
/ 11 июня 2011

Я хотел бы обсудить одну вещь: когда в теле метода run в потоке возникает исключение, то где оно будет отражено (Caller) и как с этим справиться.

вот мойкод:

class MyThread extends Thread{
        public void run() throws IllegalInterruptedException{
               Thread.currentThread().sleep(1234);
        }
}

тогда кто (Абонент) справится с этим исключением.

Ответы [ 5 ]

1 голос
/ 11 июня 2011

Есть 2 разных случая:

  • JVM передает исключение в обработчик исключений, если он уже установлен для ThreadGroup.
  • В противном случае JVM справится с этим.

Пример программы:

public class ThreadGroupDemo extends ThreadGroup {
    public ThreadGroupDemo() {
        super("This is MyThreadGroupDemo");
    }
    public void uncaughtException(Thread t, Throwable ex) {
        // Handle your exception here .... 
    }
}

Thread t = new Thread(new ThreadGroupDemo(), "My Thread") {
        // Some code here ......  
};

t.start();  

ПРИМЕЧАНИЕ: Проверьте эту ссылку.

0 голосов
/ 12 июня 2011

Еще один вариант - сделать задачу вызываемой и использовать ее для выполнения. После этого вы получите автоматическое завершение любых исключений при получении Future.

0 голосов
/ 11 июня 2011

Исключения генерируются программами, когда происходит что-то необычное. Общий учебник доступен здесь , но в итоге ваша программа будет искать в классе, который выдает исключение, в надежде найти что-то для его обработки: возможно, оператор catch типа:

catch (IllegalInterruptedException e) {

//what you want the program to do if an IllegalInterruptedException
//is thrown elsewhere and caught here. For example:

System.err.println( "program interrupted!" + e.getMessage() );

}

Если ваша программа не может найти оператор catch в классе, который выбрасывает оператор, она будет искать что-то для обработки этого в родительском классе. Имейте в виду, что все, что делал дочерний класс, когда выбрасывается исключение, останавливается, когда он генерирует исключение. По этой причине вам следует заключить блок кода, который может выдать исключение, в блок «try» и следовать за ним с тем, что вы хотите выполнить, в операторе «finally», который будет выполняться независимо от того, что.

Учебник, указанный выше, действительно полезен.

0 голосов
/ 11 июня 2011

Вы можете увидеть run() как main() и получить ответ. Но я не думаю, что вы можете переопределить run() и объявить new nonRuntime-Exceptions .. так что вы получите ошибку компиляции.
PS: Я не могу найти IllegalInterruptedException, может быть, вы хотите сказать InterruptedException

0 голосов
/ 11 июня 2011

Если я правильно понял, вы хотите обрабатывать исключения, которые запускаются в другом потоке.Взгляните на setDefaultUncaughtExceptionHandler, одна страница с примером:

Java2S

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...