我有一个线程类和运行方法,我拨打电话到Web服务,该电话是在尝试捕捉将调用方法抛出错误!
try {
// Make webs service call
}
catch (Exception e) {
throw e;
}
Eclipse不喜欢这个!
基本上我想抛出这个错误的调用方法,并在那里处理?
我有一个线程类和运行方法,我拨打电话到Web服务,该电话是在尝试捕捉将调用方法抛出错误!
try {
// Make webs service call
}
catch (Exception e) {
throw e;
}
Eclipse不喜欢这个!
基本上我想抛出这个错误的调用方法,并在那里处理?
如果你抛出checked异常,异常必须要么用try/catch语句或声明为方法签名抛出来处理。见exceptions tutorial;特别是关于The Three Kinds of Exceptions的部分。
这里还有一些关于方法重写的内容。作为[我在我的答案中添加](http://stackoverflow.com/questions/5976764/throw-error-to-calling-method/5976800#5976800) – 2011-05-12 10:59:55
那是因为你重写了run()
而且重载将不允许你声明更广泛的异常被抛出。你可以把它包装在RuntimeException
。
做它像
new Thread(new Runnable() {
public void run() {
try{
//your code
}catch(Exception ex){
throw new RuntimeException(ex);//or appropriate RuntimeException
}
}
}).start();
}
[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
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;
}
}
}
而不是捕捉异常,将throws Exception
添加到方法签名。这将强制调用方法来捕获异常。
正如在线程中所说,这不会像Runnable.run没有抛出子句。 – planetjones 2011-05-12 10:56:15
你是什么意思“Eclipse不喜欢这个!”? – abalogh 2011-05-12 10:41:34
未处理的异常类型异常 – 2011-05-12 10:46:52
“抛出此错误的调用方法”,我怀疑这是可能的,调用方法生活在另一个线程... – Ishtar 2011-05-12 10:51:31