2011-05-12 71 views
1

我有一个线程类和运行方法,我拨打电话到Web服务,该电话是在尝试捕捉将调用方法抛出错误!

try { 
    // Make webs service call 
} 
catch (Exception e) { 
    throw e; 
} 

Eclipse不喜欢这个!

基本上我想抛出这个错误的调用方法,并在那里处理?

+0

你是什么意思“Eclipse不喜欢这个!”? – abalogh 2011-05-12 10:41:34

+0

未处理的异常类型异常 – 2011-05-12 10:46:52

+0

“抛出此错误的调​​用方法”,我怀疑这是可能的,调用方法生活在另一个线程... – Ishtar 2011-05-12 10:51:31

回答

4

如果你抛出checked异常,异常必须要么用try/catch语句或声明为方法签名抛出来处理。见exceptions tutorial;特别是关于The Three Kinds of Exceptions的部分。

+0

这里还有一些关于方法重写的内容。作为[我在我的答案中添加](http://stackoverflow.com/questions/5976764/throw-error-to-calling-method/5976800#5976800) – 2011-05-12 10:59:55

3

那是因为你重写了run()而且重载将不允许你声明更广泛的异常被抛出。你可以把它包装在RuntimeException

做它像

new Thread(new Runnable() { 

      public void run() { 
       try{ 
        //your code 
       }catch(Exception ex){ 
        throw new RuntimeException(ex);//or appropriate RuntimeException 
       } 
      } 
     }).start(); 

    } 
+0

[Runnable.run](http://download.oracle。 com/javase/1.4.2/docs/api/java/lang/Runnable.html#run%28%29)没有声明它抛出任何异常,所以你不能从它中抛出一个检查异常。 – sudocode 2011-05-12 10:46:15

3

Yep java.lang.Exception被选中,所以你不能抛出它(因为Runnable.run没有在它的throws子句中声明任何异常;它没有throws子句)。你只能抛出RunTimeExceptions。你将不得不处理Checked Exceptions - 这是Java强迫你做的事情。一种方法是将检查异常转换为RunTimeException,以便将其抛出。但不要忘记这是一个单独的线程,所以请注意您的处理逻辑。

public class ThreadFun implements Runnable { 

    public void run() { 

     // LEGAL 
     try { 

     } catch (RuntimeException e) { 
      throw e; 
     } 

     // NOT LEGAL 
     try { 

     } catch (Exception e) { 
      throw e; 
     }   
    } 
} 
0

而不是捕捉异常,将throws Exception添加到方法签名。这将强制调用方法来捕获异常。

+0

正如在线程中所说,这不会像Runnable.run没有抛出子句。 – planetjones 2011-05-12 10:56:15

相关问题