Java 未捕获异常处理程序问题
我有一个类(在它自己的文件中) 在我的主要课程中,我有以下内容:-Java 未捕获异常处理程序问题,java,android,multithreading,Java,Android,Multithreading,我有一个类(在它自己的文件中) 在我的主要课程中,我有以下内容:- Thread.setDefaultUncaughtExceptionHandler( new UncaughtExceptionHandler()); 编译时出现以下错误:- cannot instantiate the type Thread.UncaughtExceptionHandler 我是否遗漏了一些基本要点 代码如下: 导入java.io.* 导入android.content.* 公共类UncaughtExce
Thread.setDefaultUncaughtExceptionHandler( new UncaughtExceptionHandler());
编译时出现以下错误:-
cannot instantiate the type Thread.UncaughtExceptionHandler
我是否遗漏了一些基本要点
代码如下:
导入java.io.*
导入android.content.*
公共类UncaughtExceptionHandler实现
java.lang.Thread.UncaughtExceptionHandler{
私有最终上下文myContext
public UncaughtExceptionHandler(Context context) {
myContext = context;
}
public void uncaughtException(Thread thread, Throwable exception) {
boolean crashedOnLastClose = false;
MyApplication.writeProgressLog("before isfinishing".ERROR_FILE_NAME);
// The application is being destroyed by the O/S
crashedOnLastClose = true;
MyApplication.writeProgressLog("after isfinishing",ERROR_FILE_NAME);
}
}
问题
在声明中
Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler());
实际上是
new java.lang.Thread.UncaughtExceptionHandler()
这是在抛出异常
解决方案
检查文件UncaughtExceptionHandler.java
查找包:(在文件顶部)
现在转到你的主程序
替换
Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler());
与
UncaughtExceptionHandler是一个接口,您不能实例化接口。您需要实现它的方法 您的代码应该如下所示:
Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread thread, Throwable ex) {
// your code
}
});
希望这能有所帮助。我的IDE在使用@Override的同一构造中遇到了类似的问题。 类型为new Thread.UncaughtExceptionHandler(){}的方法uncaughtException(Thread,Throwable)必须重写超类方法:
Thread.UncaughtExceptionHandler uce = new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable e) {
String s = "ssh to user@" + host + " failed";
log.error(s);
throw new IllegalStateException(s, e);
}
};
您是否实现了接口的所有方法?您必须重写方法?如果在编译或运行程序时出现错误,则必须重写方法?在我看来,获得“无法实例化类型”似乎非常奇怪编译时出错…看起来您正在根据上面发布的内容在静态上下文中调用'Thread.setDefaultUncaughtExceptionHandler'。这是一个实例方法,而不是静态方法。您可以发布代码吗?这是handlerI的代码。我刚刚输入的实现代码与主clas中的示例完全相同s和it错误与“必须重写超类方法”我似乎混淆了如何使用StackOverflow。为了在请求后显示代码,我应该在哪里使用代码块进行响应?是否编辑原始?此外,此注释区域似乎不允许按ener启动新lin。请尝试删除@override annota我刚刚尝试了你的建议,但仍然给出了无法实例化messageuse
Thread.setDefaultUncaughtExceptionHandler(新的.package.UncaughtExceptionHandler(this))
…如果这不起作用,请尝试将您的类名称更改为其他名称。在所有这些之后,我发现这不是super.onCreate之后的第一行,因此将其上移,一切正常。感谢所有帮助过我的人,只有我能看到定位,因此我很抱歉浪费了时间。作为Android的相对新手,我很感兴趣了解其背后的原理必须是第一行。事实证明,我将Java编译器符合性级别设置为1.5。将其更改为1.6可以解决此问题(EclipseIndigo)。(为什么?)
Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler());
Thread.setDefaultUncaughtExceptionHandler(new your.package.UncaughtExceptionHandler());
Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread thread, Throwable ex) {
// your code
}
});
Thread.UncaughtExceptionHandler uce = new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable e) {
String s = "ssh to user@" + host + " failed";
log.error(s);
throw new IllegalStateException(s, e);
}
};