`
headof
  • 浏览: 23048 次
  • 来自: ...
社区版块
存档分类
最新评论

Java UncaughtExceptionHandler接口

    博客分类:
  • java
阅读更多
UncaughtExceptionHandler接口用来捕获运行时未被程序捕获异常.
如下面的例子.
		for (int i=5;i >=0 ;i--) {
			int value = 5 / i;
			System.out.println(value);
		}

直接在main方法里执行,在console里是不会报错的.
但仔细看一下代码会发现,当i为0时此处代码应该抛ArithmeticException.为何没有,是因为程序中没有任何异常catch.
如果在main方法中加入
		Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {

			public void uncaughtException(Thread t, Throwable e) {
				e.printStackTrace();
			}} );

再执行会发现console会出现
Exception in thread "main" java.lang.ArithmeticException: / by zero 信息.

在有线程的情况下。对于主线程是无法捕获Thread的异常的。
	static class Task implements Runnable {

		@Override
		public void run() {
			for (int i=5;i >=0 ;i--) {
				int value = 5 / i;
				System.out.println(value);					
			}
		}
	}

		try {
			Thread unCaughtableThread = new Thread(new Task());
			unCaughtableThread.start();
		} catch (Exception e) {
			System.out.print("can do somthing");//无法执行
                        e.printStackTrace();
		}

如果修改一下
		try {
			Thread caughtableThread = new Thread(new Task());
			caughtableThread.setUncaughtExceptionHandler(new SimpleUncaughtExceptionHandler());
			caughtableThread.start();
		} catch (Exception e) {
			System.out.print("can do somthing");//依然不会出执行
			e.printStackTrace();
		}

	static class SimpleUncaughtExceptionHandler implements UncaughtExceptionHandler {

		@Override
		public void uncaughtException(Thread t, Throwable e) {
			System.err.println(t.getName() + "  " +e.getMessage());//这里会捕获异常。
			e.printStackTrace();
		}
	}
分享到:
评论
3 楼 小飞279 2014-03-28  
"直接在main方法里执行,在console里是不会报错的." 这也太能误导人了吧,main本身就是一个线程,这个线程如果有异常没有捕获,一样会往外抛,如果没人处理,就会由JVM来处理,怎么可能不会报错??
2 楼 headof 2012-12-03  
主线程的Thread.start抛出的RuntimeException异常无法catch住 .
1 楼 CEOandy521 2012-10-22  
"在有线程的情况下。对于主线程是无法捕获Thread的异常的。"
这块是为什么呢?

相关推荐

    java UncaughtExceptionHandler Demo

    java UncaughtExceptionHandler:里面我用了多线程,自己导入就可以运行。强大的异常处理不解释,吃透就你知道其中的奥妙。不懂的回帖

    Android捕获异常处理——UncaughtExceptionHandler

    Android捕获异常处理——UncaughtExceptionHandler

    iOS捕获异常组件UncaughtExceptionHandler

    添加UncaughtExceptionHandler这个类 iOS SDK提供的函数是NSSetUncaughtExceptionHandler来进行异常处理。但是无法处理内存访问错误、重复释放等错误,因为这些错误发送的SIGNAL。所以需要处理这些SIGNAL

    Android开发使用UncaughtExceptionHandler捕获全局异常

    在集成了统计SDK(友盟统计,百度统计等)之后,有一个非常有利于...首先实现创建一个类,实现UncaughtExceptionHandler接口。代码如下: 代码如下:public class CrashHandler implements UncaughtExceptionHandler {

    CrashHandler

    Android 应用不可避免的会发生crash 即崩溃,无论程序写的多好...java的Thread中有一个UncaughtExceptionHandler接口,该接口的作用主要是为 了 当 Thread 因未捕获的异常而突然终止时,调用处理程序。 崩溃信息捕获,

    UncaughtExceptionHandler的使用.md

    android中用UncaughtExceptionHandler抓取闪退日志

    Android异常捕获demo(可以捕获ANR+UncaughtExceptionHandler)

    此demo可以捕获android的异常,可以捕获ANR+UncaughtExceptionHandler类异常,并输出到本地文件,6.0需要添加动态读写权限

    UncaughtExceptionHandler Demo

    UncaughtExceptionHandler 来捕获异常

    UncaughtException处理类

    java UncaughtExceptionHandler:完整代码,自己导入就可以运行。异常处理

    java线程学习笔记

    1.4 任务中返回值Callable接口 3 1.5 休眠 6 1.6 让步 6 1.7 优先级 6 1.8 后台线程(daemon) 6 1.9 加入线程(join) 8 1.10 捕获异常(UncaughtExceptionHandler) 9 1.11 线程与任务 10 1.12 让后计算 11 二 ...

    USB通信(USB打印) and全局捕获异常Log信息

    整理完善usb通信(usb打印),可判断设备连接状态和开关机状态,设备连接过程中断开连接后,自动连接. UncaughtExceptionHandler接口实现本地捕获异常log信息保存到本地内存,方便查看调试!

    jna-5.6.0.jar中文文档.zip

    注:下文中的 *** 代表文件名中的版本号。 # 【jna-***.jar中文文档.zip】 中包含: 中文文档:【jna-***-javadoc-API文档-中文(简体)版.zip】 ...com.sun.jna.Callback.UncaughtExceptionHandler ...... ```

    android异常收集处理

    在Android中有的未知的Bug可能在测试中没有及时发现,导致用户在使用时出现程序奔溃,出现用户...android提供了Thread.UncaughtExceptionHandler接口,可以通过实现这个接口,在全局中捕获异常并处理,上传到服务器。

    jna-5.5.0.jar中文文档.zip

    注:下文中的 *** 代表文件名中的版本号。 # 【jna-***.jar中文文档.zip】 中包含: 中文文档:【jna-***-javadoc-API文档-中文(简体)版.zip】 ...com.sun.jna.Callback.UncaughtExceptionHandler ...... ```

    jna-4.5.2.jar中文文档.zip

    注:下文中的 *** 代表文件名中的版本号。 # 【jna-***.jar中文文档.zip】 中包含: 中文文档:【jna-***-javadoc-API文档-中文(简体)版.zip】 ...com.sun.jna.Callback.UncaughtExceptionHandler ...... ```

    android 捕捉异常并上传至服务器的简单实现

    Google考虑到这一点,也提供了Thread.UncaughtExceptionHandler接口来实现这一问题。 创建Crash异常捕获很简单,主要的步骤有: 1.创建BaseApplication继承Application并实现Thread.UncaughtExceptionHandler 2....

    jna-4.4.0.jar中文文档.zip

    注:下文中的 *** 代表文件名中的版本号。 # 【jna-***.jar中文文档.zip】 中包含: 中文文档:【jna-***-javadoc-API文档-中文(简体)版.zip】 ...com.sun.jna.Callback.UncaughtExceptionHandler ...... ```

    jna-5.0.0.jar中文文档.zip

    注:下文中的 *** 代表文件名中的版本号。 # 【jna-***.jar中文文档.zip】 中包含: 中文文档:【jna-***-javadoc-API文档-中文(简体)版.zip】 ...com.sun.jna.Callback.UncaughtExceptionHandler ...... ```

    jna-5.10.0.jar中文文档.zip

    注:下文中的 *** 代表文件名中的版本号。 # 【jna-***.jar中文文档.zip】 中包含: 中文文档:【jna-***-javadoc-API文档-中文(简体)版.zip】 ...com.sun.jna.Callback.UncaughtExceptionHandler ...... ```

Global site tag (gtag.js) - Google Analytics