Java UncaughtExceptionHandler中的StackOverflower错误

Java UncaughtExceptionHandler中的StackOverflower错误,java,android,uncaughtexceptionhandler,Java,Android,Uncaughtexceptionhandler,我已经实现了一个未捕获的异常处理程序来捕获未捕获的异常。但在某个时间或某些设备中,此处理程序失败,出现java.lang.StackOverflowerError。以下是异常的日志: java.lang.StackOverflowError at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:121) at java.lang.StringBuffer.append(StringBuffer.java:278

我已经实现了一个未捕获的异常处理程序来捕获未捕获的异常。但在某个时间或某些设备中,此处理程序失败,出现
java.lang.StackOverflowerError
。以下是异常的日志:

java.lang.StackOverflowError
at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:121)
at java.lang.StringBuffer.append(StringBuffer.java:278)
at java.io.StringWriter.write(StringWriter.java:123)
at com.android.internal.util.FastPrintWriter.flushLocked(FastPrintWriter.java:358)
at com.android.internal.util.FastPrintWriter.appendLocked(FastPrintWriter.java:303)
at com.android.internal.util.FastPrintWriter.write(FastPrintWriter.java:625)
at com.android.internal.util.FastPrintWriter.append(FastPrintWriter.java:658)
at java.io.PrintWriter.append(PrintWriter.java:691)
at java.io.PrintWriter.append(PrintWriter.java:31)
at java.lang.Throwable.printStackTrace(Throwable.java:324)
at java.lang.Throwable.printStackTrace(Throwable.java:300)
at android.util.Log.getStackTraceString(Log.java:459)
at com.example.src.CustomExceptionHandler.uncaughtException(CustomExceptionHandler.java:36)
at com.example.src.CustomExceptionHandler.uncaughtException(CustomExceptionHandler.java:41)
at com.example.src.CustomExceptionHandler.uncaughtException(CustomExceptionHandler.java:41)
以及导致错误
defaultUEH.uncaughtException(t,e)的行根据stacktrace

完整代码为:

import java.lang.Thread.UncaughtExceptionHandler;
import android.util.Log;

class CustomExceptionHandler implements UncaughtExceptionHandler {

private UncaughtExceptionHandler defaultUEH;

protected CustomExceptionHandler() {
    try
    {
        this.defaultUEH = Thread.getDefaultUncaughtExceptionHandler();
    }
    catch(Exception e)
    {
        System.out.println("Exception: "+e);
    }
}

public void uncaughtException(Thread t, Throwable e) {
    try
    {
        String stacktrace = Log.getStackTraceString(e);

        SendStackTraceToServer sendStackTraceToServer = new SendStackTraceToServer();
        sendStackTraceToServer.startThreadToSendRequest(stacktrace);

        defaultUEH.uncaughtException(t, e); // this line cause stackoverflow error.
    }
    catch(Exception ex)
    {
        System.out.println("Exception: "+ex);
    }
}

protected static void setDefaultUncaughtExceptionHandler()
{
    Thread.setDefaultUncaughtExceptionHandler(new CustomExceptionHandler());
}
}

帮我解决这个问题。因为我无法重现此问题(或者我不知道如何重现此问题)。

java.lang.StackOverflower错误不例外


如果需要捕获所有的“可丢弃的”

defaultUEH.uncaughtException(t,e),则可以捕获可丢弃的;调用defaultUEH.uncaughtException(t,e);调用defaultUEH.uncaughtException(t,e)。。。最后你得到了StackOverflowerr

也许我不对,但我认为你的代码很复杂

我建议使用如下处理程序:

Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
    @Override
    public void uncaughtException(Thread t, Throwable e) {
        String stacktrace = Log.getStackTraceString(e);
        SendStackTraceToServer sendStackTraceToServer = new SendStackTraceToServer();
        sendStackTraceToServer.startThreadToSendRequest(stacktrace);
    }
});

无论如何,抓住伊托克是个坏主意。您知道为什么“UncaughtExceptionHandler”会在defaultUEH.uncaughtException(t,e);”行导致堆栈溢出错误吗;。应用程序递归太深的原因是什么。如果我从函数中删除“defaultUEH.uncaughtException(t,e);”,则当任何未捕获的异常发生时,我的应用程序将被挂起。有什么想法吗?@DevK我不明白你的问题。你想做什么?