Трассировка стека отличается от причины. Если вы создаете исключение
new Exception("Something bad happened")
Нет причины.
Если, однако, вы создаете исключение, передавая другое исключение, причина будет. Например:
try {
//do stuff
} catch (IOException ie) {
throw new Exception("That's not good", ie);
}
Тогда ie
будет причиной.
Если вы пытаетесь определить, какой класс выдает исключение, вы можете сделать что-то вроде этого:
public static String getThrowingClass(Throwable t){
StackTraceElement[] trace = t.getStackTrace();
if(trace != null && trace.length > 0){
return trace[0].getClassName();
} else {
return "UnknownClass";
}
}