exception.getMessage() output with class name

前端 未结 2 452
天涯浪人
天涯浪人 2020-12-16 10:03

I\'m trying to fix an issue, in my application I have this code

try {
  object1.method1();
} catch(Exception ex) {
   JOptionPane.showMessageDialog(nulll, \"         


        
相关标签:
2条回答
  • 2020-12-16 10:19

    I think you are wrapping your exception in another exception (which isn't in your code above). If you try out this code:

    public static void main(String[] args) {
        try {
            throw new RuntimeException("Cannot move file");
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Error: " + ex.getMessage());
        }
    }
    

    ...you will see a popup that says exactly what you want.


    However, to solve your problem (the wrapped exception) you need get to the "root" exception with the "correct" message. To do this you need to create a own recursive method getRootCause:

    public static void main(String[] args) {
        try {
            throw new Exception(new RuntimeException("Cannot move file"));
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null,
                                          "Error: " + getRootCause(ex).getMessage());
        }
    }
    
    public static Throwable getRootCause(Throwable throwable) {
        if (throwable.getCause() != null)
            return getRootCause(throwable.getCause());
    
        return throwable;
    }
    

    Note: Unwrapping exceptions like this however, sort of breaks the abstractions. I encourage you to find out why the exception is wrapped and ask yourself if it makes sense.

    0 讨论(0)
  • 2020-12-16 10:23

    My guess is that you've got something in method1 which wraps one exception in another, and uses the toString() of the nested exception as the message of the wrapper. I suggest you take a copy of your project, and remove as much as you can while keeping the problem, until you've got a short but complete program which demonstrates it - at which point either it'll be clear what's going on, or we'll be in a better position to help fix it.

    Here's a short but complete program which demonstrates RuntimeException.getMessage() behaving correctly:

    public class Test {
        public static void main(String[] args) {
            try {
                failingMethod();
            } catch (Exception e) {
                System.out.println("Error: " + e.getMessage());
            }
        }       
    
        private static void failingMethod() {
            throw new RuntimeException("Just the message");
        }
    }
    

    Output:

    Error: Just the message
    
    0 讨论(0)
提交回复
热议问题