2012-06-27 3 views
4

코드 : 스레드에서 exceuted자바의 스레드에서 예외를 전파하는 방법은 무엇입니까?

outerMethod { 
     @Override 
     public void run() { 
       innerMethod throws IOException 
       } 
    } 

방법은 예외를 확인 드로우 - IOException가. 메인 스레드에서이 예외를 처리해야합니다. Like :

outerMethod() throws IOException 
    { 
     @Override 
     public void run() { 
       innerMethod() throws IOException 
       } 
    } 

이게 가능합니까? 그렇지 않다면, 이것을하는 더 좋은 방법은 무엇입니까?

감사합니다.

답변

5

사용 FutureTask http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/FutureTask.html#get%28%29. get 메소드는 다른 스레드에서 실행되었을 수있는 태스크의 예외를 캡슐화합니다.

ExecutionException : 예외를 throw하여 중단 된 작업의 결과를 검색하려고 할 때 throw되는 예외입니다. 이 예외는, Throwable.getCause() 메소드를 사용해 열람 할 수 있습니다. 정의 된 경우 스레드가 있던 uncaughtExceptionHandler을 정의한 경우 this API doc

에서

2

스레드는 개별 프로세스이므로 예외 경로를 통해 대화 할 수 없으므로 다른 스레드에 예외를 전파 할 수 없습니다. 그러나 스레드 간 통신을 사용할 수 있으며 예외가 발생하면 논리적으로 대소 문자를 처리해야합니다.

+0

전화는 어떨까요? – user710818

+0

@ user710818 :이 부분을 간단히 살펴보세요 - http://www.youtube.com/watch?v=378DHU9IsS4 – bragboy

0

당신은 실행 방법 내부 예외를 처리 할 수 ​​있습니다

 @Override 
     public void run() { 
      try { 
       innerMethod(); 
      } catch (Exception e) { 
      //handle e 
      } 
3

,이 호출됩니다, 그렇지 스레드 그룹의 있던 uncaughtExceptionHandler가 호출됩니다 는 그렇지는 캐치되지 않는 예외 핸들러를 기본값으로 전달할 수 있습니다.

관련 문제