2015-04-22 40 views
2

我有以下檢查我們的包在堆棧跟蹤

StackTraceElement[] stackTrace = e.getStackTrace(); 

堆棧跟蹤陣列從堆棧跟蹤下面我需要得到mypackage中的第一行。

org.apache.cxf.jaxrs.client.AbstractClient.checkClientException(AbstractClient.java:522) 
    at org.apache.cxf.jaxrs.client.ClientProxyImpl.doChainedInvocation(ClientProxyImpl.java:544) 
    at org.apache.cxf.jaxrs.client.ClientProxyImpl.invoke(ClientProxyImpl.java:205) 
    at $Proxy94.run(Unknown Source) 
    at com.mypackage.service.BankBridgeServiceTest.test(BankBridgeServiceTest.java:507) 
com.mypackage.service.BankBridgeServiceTest.test(BankBridgeServiceTest.java:102) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 

我寫的代碼像

for(StackTraceElement stackTraceElement : stackTrace){ 
     if(!stackTraceElement.isNativeMethod()) 
     { 
      System.out.println(stackTrace.toString()) 
      break; 
     } 
    } 

但它無法正常工作。你能幫助我嗎?

回答

0

使用stackTraces [0] .getClassName()並從中找出包。

public class StackError { 
    public static void throwEX() { 
     int x = 4/0; 
    } 

    public static void method2() { 
     throwEX(); 
    } 

    public static void main(String[] args) { 
     try { 
      method2(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      StackTraceElement[] stackTraces = e.getStackTrace(); 
      if(!stackTraces[0].isNativeMethod()) 
      System.out.println("Class Name :: "+stackTraces[0].getClassName()); 

     } 
    } 
} 

輸出 - 類名稱:: content_management.School.service.StackError

希望這有助於

+0

蘇尼爾。這會從第一線本身的類名,因爲IsNativeMethod()只檢查行號是否爲-2。但我的包裝線出現在第五行。但它會根據pblm所在的錯誤而改變。 – user3809019

+0

只是大聲思考, 如果你可以循環遍歷棧跟蹤,如果find類匹配你的包結構的一些部分說「com.mypackage」,那麼你可以捕獲它,並打破了看? 我假設大部分時間的初始包結構是com.company。* –