/* demo for stack trace methods
produces the following output:
 null

 java.lang.Exception
        at StackTrace.method3(StackTrace.java:40)
        at StackTrace.method2(StackTrace.java:35)
        at StackTrace.method1(StackTrace.java:30)
        at StackTrace.main(StackTrace.java:7)

 Stack trace from getStackTrace():
 Class           File                    Line    Method
 StackTrace      StackTrace.java         40      method3
 StackTrace      StackTrace.java         35      method2
 StackTrace      StackTrace.java         30      method1
 StackTrace      StackTrace.java         7       main
*/

public class StackTrace
{
  public static void main(String[] args)
  {
    try
    {
      method1();
    }
    catch(Exception e)
    {
      System.out.printf("%s\n\n", e.getMessage());
      e.printStackTrace();
     
      StackTraceElement[] ste = e.getStackTrace();
      System.out.println("\nStack trace from getStackTrace():");
      System.out.println("Class\t\tFile\t\t\tLine\tMethod");

      for (int i=0; i<ste.length; i++)
      {
        System.out.printf("%s\t", ste[i].getClassName());
        System.out.printf("%s\t\t", ste[i].getFileName());
        System.out.printf("%s\t", ste[i].getLineNumber());
        System.out.printf("%s\n", ste[i].getMethodName());
      }
    }
  }

  public static void method1() throws Exception
  {
    method2();
  }

  public static void method2() throws Exception
  {
    method3();
  }

  public static void method3() throws Exception
  {
    throw new Exception();
  }
}
