【问题标题】:Throw error to calling method!向调用方法抛出错误!
【发布时间】:2011-05-12 10:39:25
【问题描述】:

我有一个线程类,在 run 方法中我正在调用 Web 服务,这个调用是在 try catch 中

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

Eclipse 不喜欢这样!

基本上我想把这个错误扔给调用方法并在那里处理?

【问题讨论】:

  • “Eclipse 不喜欢这个!”是什么意思?
  • 未处理的异常类型Exception
  • “把这个错误扔给调用方法”,我怀疑这是可能的,调用方法存在于另一个线程上......

标签: java exception compiler-errors


【解决方案1】:

如果您抛出已检查异常,则必须使用 try/catch 或在方法签名中将其声明为已抛出异常来处理该异常。见exceptions tutorial;特别是关于The Three Kinds of Exceptions的部分。

【讨论】:

【解决方案2】:

是的,java.lang.Exception 被选中,所以你不能抛出它(因为 Runnable.run 没有在其 throws 子句中声明任何异常;它没有 throws 子句)。你只能抛出 RunTimeExceptions。您必须处理检查的异常 - 这就是 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】:

    那是因为您正在覆盖 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 的签名并没有声明它会抛出任何异常,因此您不能从中抛出已检查的异常。
    【解决方案4】:

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

    【讨论】:

    • 正如线程中所说,这将不起作用,因为 Runnable.run 没有 throws 子句。
    猜你喜欢
    • 2018-09-12
    • 2010-11-27
    • 1970-01-01
    • 2015-03-08
    • 2019-11-10
    • 2023-04-03
    • 1970-01-01
    • 2022-07-01
    • 2017-06-01
    相关资源
    最近更新 更多