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

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`是Java异常处理机制的一部分,它允许程序员自定义当线程遇到未捕获异常时的行为。这个接口提供了处理未捕获异常的能力,这些异常通常是在线程执行过程中抛出且没有被该线程内部的...

    Android捕获异常处理——UncaughtExceptionHandler

    要注册自定义的 `UncaughtExceptionHandler`,你需要创建一个实现 `Thread.UncaughtExceptionHandler` 接口的类,并重写 `uncaughtException()` 方法。然后,在应用程序的主线程上设置这个处理器: ```java public ...

    UncaughtExceptionHandler Demo

    `java.lang.Thread.UncaughtExceptionHandler`是Java提供的一个接口,它的主要任务是处理线程中未被捕获的异常。如果一个线程在执行过程中遇到了未处理的异常,并且该线程没有设置`UncaughtExceptionHandler`,那么...

    CrashHandler

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

    java、杀死启动进程、定时执行程序、隐藏黑窗口(dos窗口)、线程异常死亡(保活)

    在这里,`RestartServerTask`是你自定义的任务类,需要实现`Runnable`接口。 隐藏黑窗口(DOS窗口)通常是指在Windows环境下运行Java程序时不显示命令行窗口。这可以通过修改Java启动参数来实现,添加"-windowed...

    java多线程多人聊天系统

    Java的Thread.UncaughtExceptionHandler接口可以用来设置未捕获异常的处理器,确保线程在出现异常时能正确关闭,而不影响其他线程。 5. **线程池**:为了更好地管理和优化线程,Java提供了ExecutorService和...

    java线程与并行(主要讲解java的nio包某些内容)

    Java线程可以通过继承`java.lang.Thread`类或实现`Runnable`接口来创建。 ##### 创建线程 1. **继承Thread类** - 创建`Thread`类的子类并重写`run()`方法。 - 实例化子类对象,并调用`start()`方法启动线程。 ...

    java线程学习笔记

    通过实现Thread.UncaughtExceptionHandler接口并设置到线程中,可以自定义异常处理逻辑。 线程与任务的区别在于线程是操作系统的最小调度单元,而任务是指需要执行的工作内容。在Java中,可以通过Runnable或...

    java实现的电风扇

    Java提供了两种创建线程的方式:继承Thread类或实现Runnable接口。在这个电风扇程序中,很可能开发者选择实现了Runnable接口,因为这种方式更灵活,可以避免单继承的限制。 电风扇模拟可能涉及以下关键概念: 1. *...

    Java时序银行系统.zip

    Java的`try-catch-finally`结构和`Thread.UncaughtExceptionHandler`接口可以用于捕获和处理线程中的异常。 总之,"Java时序银行系统"是一个很好的学习多线程编程的案例。通过分析和实践这个项目,开发者可以深入...

    Java多线程下载网络图片

    另一方面,`DownLoadUtil.java`可能实现了`Runnable`接口,提供了一个`run()`方法来执行下载任务。这种情况下,我们通常会使用`ExecutorService`或`ThreadPoolExecutor`来管理和调度线程,而不是直接创建`Thread`...

    多线程 Java 原创作品

    Java提供了try-catch-finally结构和Thread.UncaughtExceptionHandler接口来捕获和处理线程中的异常,确保程序的健壮性。 7. **线程安全的数据结构**:Java集合框架提供了线程安全的实现,如Vector、...

    Java-核心篇.zip

    6. **线程异常处理**:学习如何在多线程环境中捕获和处理异常,以及`Thread.UncaughtExceptionHandler`接口的使用。 7. **线程池**:深入理解`ThreadPoolExecutor`的工作原理,如何配置线程池参数,以及如何优化...

    JAVA线程学习(源代码)

    我们可以使用`uncaughtExceptionHandler`来处理线程中抛出的未捕获异常。 总的来说,"JAVA线程学习(源代码)"涵盖了Java线程的基础知识和高级特性,包括线程的创建、管理、同步和通信。通过分析和实践这些源代码,你...

    java 并发学习总结

    `Thread.UncaughtExceptionHandler`接口可以用于定义线程未捕获异常的处理方式,确保程序在出现异常时能优雅地结束。 6. **线程中断**:通过`Thread.interrupt()`方法可以请求线程中断,但实际中断行为取决于被中断...

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

    `UncaughtExceptionHandler`是Java中的一个接口,用于处理线程未捕获的异常。在Android中,每个线程都有一个默认的`UncaughtExceptionHandler`,当线程抛出未被处理的异常时,这个处理器会被调用。通过覆盖`uncaught...

    Java多线程设计模式上传文件

    Java提供了try-catch-finally结构,以及Thread.UncaughtExceptionHandler接口,用于捕获和处理线程中的未捕获异常。 9. **死锁检测与预防**:死锁是指两个或多个线程互相等待对方释放资源,导致无法继续执行的情况...

    java 多线程编程指南

    Java中的线程有两种创建方式:通过实现Runnable接口或者继承Thread类。实现Runnable接口更为灵活,因为它可以被多个线程共享,避免了单继承的限制。 其次,线程的生命周期包括新建、可运行、运行、阻塞和死亡五个...

    java源码:Java线程错误捕获工具 CheckThread.zip

    在Java中,线程的错误处理通常依赖于`Thread.UncaughtExceptionHandler`接口。这个接口定义了一个方法`uncaughtException(Thread t, Throwable e)`,当线程因未捕获的异常而终止时,系统会调用此方法。CheckThread...

    基于java的开发源码-线程错误捕获工具 CheckThread.zip

    首先,Java线程的错误捕获主要依赖于`try-catch-finally`语句块和`Thread.UncaughtExceptionHandler`接口。在多线程环境下,当一个线程抛出未捕获的异常时,如果没有设置特定的处理机制,这个异常会终止线程的执行,...

Global site tag (gtag.js) - Google Analytics