Oct 13
|
The StackTraceElement class can be used to get details about the call stack.
The following example shows how it can be used to view the call stack and determine where a method was called from.
public class WhoCalledMe { public static void main(String[] args) { f(); } public static void f() { g(); } public static void g() { showCallStack(); System.out.println(); System.out.println( "g() was called by "+whoCalledMe()); } public static String whoCalledMe() { StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace(); StackTraceElement caller = stackTraceElements[4]; String classname = caller.getClassName(); String methodName = caller.getMethodName(); int lineNumber = caller.getLineNumber(); return classname+"."+methodName+":"+lineNumber; } public static void showCallStack() { StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace(); for (int i=2 ; i<stackTraceElements.length; i++) { StackTraceElement ste = stackTraceElements[i]; String classname = ste.getClassName(); String methodName = ste.getMethodName(); int lineNumber = ste.getLineNumber(); System.out.println( classname+"."+methodName+":"+lineNumber); } } }