Throw error to calling method!

2019-05-31 16:58发布

问题:

I have a thread class and in the run method I am making a call to a web service, this call is in a try catch

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

Eclipse doesn't like this!

Basically I want to throw this error to the calling method and deal with it there?

回答1:

If you throw a checked exception, the exception must be handled either with try/catch or declaring it as thrown in the method signature. See the exceptions tutorial; particularly the part about The Three Kinds of Exceptions.



回答2:

Yep java.lang.Exception is checked, so you can't throw it (as Runnable.run does not declare any Exceptions in its throws clause; it doesn't have a throws clause). You could only throw RunTimeExceptions. You'll have to handle the Checked Exceptions - that's what Java is forcing you to do. One approach is to convert the Checked Exception into a RunTimeException so you can throw it. But don't forget this is a separate thread, so watch your handling logic.

public class ThreadFun implements Runnable {

    public void run()  {

        // LEGAL
        try {

        } catch (RuntimeException e) {
            throw e;
        }

        // NOT LEGAL
        try {

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


回答3:

That is because you are overriding run() and overriding won't allow you to declare broader exception to be thrown. You can wrap it up in RuntimeException.

Do it something like

 new Thread(new Runnable() {

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

    }


回答4:

Instead of catching the exception, add throws Exception to the method signature. This will force the calling method to catch the exception instead.