在stacktrace

时间:2015-04-22 14:46:21

标签: java stack-trace

我在

下面有一个堆栈跟踪数组
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;
        }
    }

但它不起作用。你能帮助我吗?。

1 个答案:

答案 0 :(得分: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

希望这有帮助