2013-09-13 2 views
0

Моя проблема заключается в том, что я не могу сделать внутреннюю ошибку броском исключения. Здесь я хочу, чтобы ex был брошен на внешний улов.Throw in a Catch in threads

Runnable(){ 

public void run(){ 
try{ 
    try{ 
     }catch(Exception ex){ 
     System.out.println("Inner"); 
     throw ex; //I get an error here 
    } 
}catch(Exception e){ 
    System.out.println("Outer"); 
}} 

Сообщения об ошибке: незарегистрированное Исключение должно быть пойманным, объявляются быть выброшен

+0

, пожалуйста, напишите больше информации для вашего примера, его просто шаблон –

+1

Это все код? То, что вы опубликовали, не должно приводить к ошибке «Исключение». – Omaha

+0

И e, и ex имеют тип Exception. Нет специализаций .. – user2756339

ответ

3

Поместите блок в функции .....

private void myFunction() throws Exception { 

    try{ 
     }catch(Exception ex){ 
     System.out.println("Inner"); 
     throw ex; //I get an error here 
    } 
} 

Затем вызовите его из блока кода

Runnable(){ 

public void run(){ 
    try{ 
     myFunction(); 
    }catch(Exception e){ 
    System.out.println("Outer"); 
}} 
2

Кажется, что это нормально. Создание вложенных блоков try-catch считается плохой практикой.

public class Test implements Runnable { 

public void run() { 
    try { 
     try { 
      throw new IOException("bad"); //throw something here 
     } catch (Exception ex) { 
      System.out.println("Inner"); 
      throw ex; 
     } finally { 

     } 
    } catch (Exception e) { 
     System.out.println("Outer"); 
    } 
} 


public static void main(String[] args) { 
    new Test().run(); 
} 

} 

// PRINTS: 
// Inner 
// Outer 
0

попробуйте это.

Callable(){ 

public void call(){ 
try{ 
try{ 
    }catch(Exception ex){ 
    System.out.println("Inner"); 
    throw ex; //I get an error here 
} 
}catch(Exception e){ 
System.out.println("Outer"); 
}}