Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Setting an exception cause in Java

Tags:

java

exception

I can see on catching an exception that I can print e.getCause(), though it is always null.

Do I need to set it somewhere, or is something missing which is setting the cause to null?

like image 785
Vik Avatar asked Apr 27 '11 07:04

Vik


People also ask

How do you set a cause exception in Java?

The cause is usually set in the constructor of the exception. Look at public Exception(String message, Throwable cause). If it isn't set in the constructor, you can call initCause().

How do you find the cause of exception?

The getCause() method is from Throwable class and we can use this method which returns the cause of the exception or returns null if the cause of the exception is not known.

What is cause in exception handling?

Throwable(Throwable cause) :- Where cause is the exception that causes the current exception. Throwable(String msg, Throwable cause) :- Where msg is the exception message and cause is the exception that causes the current exception.

What type of error is caused by exceptions in Java?

Exceptions are the unwanted errors or bugs or events that restrict the normal execution of a program. Each time an exception occurs, program execution gets disrupted. An error message is displayed on the screen. There are several reasons behind the occurrence of exceptions.


2 Answers

An Exception has the attributes message and cause. The message is a description, telling a human reader more or less exactly, what went wrong. The cause is something different: it is, if available, another (nested) Throwable.

The concept is often used if we use custom exceptions like this:

catch(IOException e) {   throw new ApplicationException("Failed on reading file soandso", e);   //                              ^ Message                        ^ Cause } 

In response to djangofan's comment:

The standard is that the nested expression (the cause) is printed with its stack trace too.

Running this little application

public class Exceptions {     public static void main(String[] args) {         Exception r = new RuntimeException("Some message");         throw new RuntimeException("Some other message", r);     } } 

will output

Exception in thread "main" java.lang.RuntimeException: Some other message     at Exceptions.main(Exceptions.java:4)     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)     at java.lang.reflect.Method.invoke(Method.java:498)     at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) Caused by: java.lang.RuntimeException: Some message     at Exceptions.main(Exceptions.java:3)     ... 5 more 

Both messages are included.

like image 101
Andreas Dolk Avatar answered Sep 18 '22 08:09

Andreas Dolk


The cause is usually set in the constructor of the exception. Look at public Exception(String message, Throwable cause).

If it isn't set in the constructor, you can call initCause().

like image 44
Simon Nickerson Avatar answered Sep 18 '22 08:09

Simon Nickerson