通过命令行从java打印完整的错误消息

时间:2011-07-24 01:27:49

标签: java

我目前正在运行一个只能通过使用java的program / s命令行运行的应用程序。当我打印出错误时,如何查看完整的打印件?

即。我怎么看“13更多”

Exception:
        java.lang.reflect.InvocationTargetException
        (rethrown as com.comsol.util.exceptions.FlException)
Messages:
        Error running java class
        - Detail: Error_running_java_class

Stack trace:
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at com.comsol.util.application.CsBaseApplication.runExternalClassStat(Unknown Source)
        at com.comsol.util.application.CsBaseApplication.runExternalClass(Unknown Source)
        at com.comsol.util.compile.a$a.a(Unknown Source)
        at com.comsol.util.compile.a$a.call(Unknown Source)
        at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
        at java.util.concurrent.FutureTask.run(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IndexOutOfBoundsException: Index: 4, Size: 4
        at java.util.ArrayList.RangeCheck(Unknown Source)
        at java.util.ArrayList.get(Unknown Source)
        at Enviornment.makeNextGen(Enviornment.java:269)
        at Enviornment.main(Enviornment.java:44)

        ... 13 more

谢谢!

2 个答案:

答案 0 :(得分:4)

此堆栈跟踪包含您需要知道的所有内容,与控制台输出无关。它只是跳过重复的行。


更新。

假设您的方法调用a()调用b()并且b()捕获从其他方法foobar()抛出的异常,将其包装在另一个异常中并重新抛出它。这是堆栈跟踪的外观:

void b() {
   try {
     foobar();
   } catch(Exception e) {
     // Stack trace for e:
     // foobar()
     // b()
     // a()
     throw new RuntimeException("error",e); 
  }
}

void a() {
  try {
    b(); 
  } catch(Exception e) {
   // Stack trace for e
   // b()
   // a() 
   // Cause:
   // foobar()
   // b() - repeating line
   // a() - repeating line
   e.printStackTrace();
  } 
}

因此,打印异常的代码只是跳过重复行,因为它们没有附加值。在您的问题中,在我的示例中,InvocationTargetExceptionRuntimeException代替InvocationTargetException。 {{1}}是反射通常使用的异常。

答案 1 :(得分:1)

有关在您的案例中生成13 more的代码,请参阅http://www.docjar.com/html/api/java/lang/Throwable.java.html#671

它计算此异常与先前打印的异常相同的堆栈跟踪元素。所以你知道你必须将最后13行(在这种情况下意味着全部)从上面的异常添加到截断的跟踪。