2011-07-24 43 views
1

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

即我如何看到 “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 

的感谢!

+0

如果你不能输出到一个文件,这不是更多的操作系统问题,而不是Java问题? –

+0

请参阅http://stackoverflow.com/questions/1043378/print-full-call-stack-on-printstacktrace/1043484#1043484 – akf

回答

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(); 
    } 
} 

因此,打印异常的代码只是跳过重复行,因为它们没有附加值。在我的例子中,在你的问题中有InvocationTargetException代替RuntimeExceptionInvocationTargetException通常是由反射使用的异常。

+0

“造成”部分呢? – randomafk

+0

这是在反射调用中引发的基础异常。它在'InvocationTargetException'中作为'cause'返回。 –

+0

那么“13更多”只是重复之前已经打印的内容? – randomafk

1

请参阅http://www.docjar.com/html/api/java/lang/Throwable.java.html#671了解您的情况下生成13 more的代码。

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