2011-07-24 38 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行(在這種情況下意味着全部)從上面的異常中添加到截斷的跟蹤中。