我有一个线程类,在run方法中我正在调用一个Web服务,这个调用是在try catch
try {
// Make webs service call
}
catch (Exception e) {
throw e;
}
Eclipse不喜欢这个!
基本上我想把这个错误抛给调用方法并在那里处理它?</ p>
答案 0 :(得分:4)
如果抛出一个已检查的异常,则必须使用try / catch处理该异常,或者在方法签名中将其声明为抛出异常。见exceptions tutorial;特别是关于The Three Kinds of Exceptions的部分。
答案 1 :(得分:3)
那是因为你覆盖了run()
并且覆盖将不允许你声明更广泛的异常被抛出。您可以将其打包在RuntimeException
。
做类似
的事情 new Thread(new Runnable() {
public void run() {
try{
//your code
}catch(Exception ex){
throw new RuntimeException(ex);//or appropriate RuntimeException
}
}
}).start();
}
答案 2 :(得分:3)
是的java.lang.Exception
被检查,所以你不能抛出它(因为Runnable.run没有在其throws子句中声明任何异常;它没有throws子句)。你只能抛出RunTimeExceptions。您必须处理Checked Exceptions - 这就是Java强迫您做的事情。一种方法是将Checked Exception转换为RunTimeException,以便抛出它。但是不要忘记这是一个单独的线程,所以要注意你的处理逻辑。
public class ThreadFun implements Runnable {
public void run() {
// LEGAL
try {
} catch (RuntimeException e) {
throw e;
}
// NOT LEGAL
try {
} catch (Exception e) {
throw e;
}
}
}
答案 3 :(得分:0)
不是捕获异常,而是将throws Exception
添加到方法签名中。这将强制调用方法来捕获异常。