`
Mybeautiful
  • 浏览: 297114 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

从源头上捕获线程中产生的异常

阅读更多

    我们经常碰到线程突然死掉,但是又找不到原因,总不能在每个线程的run方法中都加上Try Catch吧, 况且对第三方框架内启的线程你想加Try catch还加不了呢? 怎么办?

    现在有一个现成的办法,就是给每个线程"加个"默认的Try Catch, 任意一个线程出现没有捕获住的异常都执行我们自定义的那段代码。Thread中提供一个 setDefaultUncaughtExceptionHandler 的静态方法,给我们提供了这种可能。

    代码贴出来如下:

 

		   class ExceptionHandler implements UncaughtExceptionHandler{
			   private  final Logger logger = Logger.getLogger("Exception"); 
			   ExceptionHandler(){
				    FileHandler myFileHandler;
					try {
						myFileHandler = new FileHandler   ("D:\\Logger.log");
					    SimpleFormatter formatter = new SimpleFormatter();  
					    logger.addHandler(myFileHandler);  
					    myFileHandler.setFormatter(formatter);  
					} catch (SecurityException e) {
						e.printStackTrace();
					} catch (IOException e) {
						e.printStackTrace();
					}  
			   }
			   
			@Override
			public void uncaughtException(Thread t, Throwable e) {
				   logger.log(Level.ALL, "UncaughtException Thread ");
				
			}
		  }
		   UncaughtExceptionHandler handle=new ExceptionHandler();
		   Thread.setDefaultUncaughtExceptionHandler(handle);

 

     在程序启动的时候加入这一段。这样任何线程中,只有有没有被捕获的异常,都会执行我自定义的Handle的uncaughtException方法,把这个异常打印出来。

1
0
分享到:
评论

相关推荐

    debug程序,应用程序发生异常

    标题 "debug程序,应用程序发生异常" 提到的问题主要涉及到软件开发中的调试环节,特别是当一个应用程序在执行过程中遇到异常情况,比如除零错误。在编程中,异常是程序执行时遇到的非正常情况,通常会导致程序崩溃...

    java源码:网络数据包捕获函数库 jNetPcap.zip

    - **多线程处理**:jNetPcap支持多线程捕获,可以在多个线程间分配数据包处理任务,提高处理效率。 - **事件驱动编程**:利用回调函数,可以在数据包到达时立即触发处理,避免了轮询检查的开销。 - **统计与...

    java复习提纲 短小精悍

    5. 多重catch:Java 7后允许在一个catch块中捕获多种类型的异常,简化代码。 6. 异常链:记录异常发生过程,方便追踪问题源头。 以上就是基于“java复习提纲”的主要知识点,深入理解和熟练掌握这些内容,对于提升...

    Java异常跟踪栈定义与用法示例

    结果分析:只要异常没有被完全捕获,异常从发生异常的方法逐渐向外传播,首先传给该方法的调用者,该方法调用者再次创给其调用者……直至最后传到 main 方法,如果 main 方法依然没有处理该异常,JVM 会中止该程序,...

    博客资源:RxJava封装异步任务RxAsyncTask

    3. **异常处理** - 可以捕获并处理异步操作中的异常,提供更健壮的错误处理机制。 4. **链式调用** - 利用RxJava的操作符,可以方便地进行任务的串联和并行,提高代码可读性。 5. **取消任务** - 提供了取消任务的...

    CustomResponseExceptionProcessor

    2. **异常分类**:一旦捕获到异常,该组件可能会对它们进行分类,根据异常类型、严重性或业务上下文进行区分。这有助于决定后续的响应策略。 3. **自定义响应生成**:此组件的核心功能在于生成自定义响应。这可能...

    ****大公司的面试题.doc

    - **异常链**:当一个异常处理过程中抛出了另一个异常,原来的异常信息会被保存在新异常的`cause`属性中,形成异常链,方便追踪问题源头。 - **自定义异常**:可以通过继承`Exception`或其子类创建自定义异常,...

    DebugView 4.76

    1. **软件开发**:在开发过程中,DebugView可以帮助开发者查看程序内部的调试输出,追踪异常或错误的源头。 2. **系统调试**:对于系统级的问题,如驱动程序的调试,DebugView可以捕获内核模式下的调试信息,提供...

    madExcept5_源码版.rar

    7. **多线程支持**:madExcept能够处理多线程应用中的异常,确保每个线程的异常都能被正确捕获。 **源码学习价值** 拥有madExcept 5的源码意味着你可以深入理解其工作原理,学习如何编写更健壮的异常处理代码。这有...

    TestForm.zip

    上述代码会在捕获异常时打印出导致异常的完整调用堆栈。 7. **性能考虑**:`StackTrace`类的使用可能会对性能产生一定影响,特别是在高并发或性能敏感的场景下。因此,应谨慎在生产环境中使用,通常只在调试或异常...

    vc调试经验分享 vc调试合集

    对于复杂的调试场景,如崩溃或未捕获的异常,利用“调试器事件”设置在特定事件(如异常)发生时中断,这样可以更好地分析出错时的上下文。 最后,了解并运用调试器的高级特性,如数据筛选、条件断点、命令行调试、...

    EurekaLog 7.7.8.24 fixed.rar

    这个报告不仅包含异常类型、堆栈跟踪,还可能包括内存快照、线程信息、系统配置等,这对于定位问题的源头非常有帮助。开发者可以通过这些信息快速定位到代码中的错误位置,从而缩短了故障排查时间。 EurekaLog 7.7....

    Python技术使用问题深度剖析与解决思路.docx

    使用try-except语句来捕获和处理异常,确保程序在遇到错误时能够优雅地退出,而不是突然崩溃。同时,结合logging模块记录异常信息,可以有效地定位和解决程序运行时的问题。 总的来说,Python开发者需要了解并掌握...

    VC常见问题集(中文)

    - **异常类型与捕获**:理解C++标准异常和结构化异常的区别,以及如何有效地捕获和处理异常。 - **异常安全编程**:了解基本、强烈和无处不在的异常安全性,以确保在异常发生时资源得到正确释放。 6. **性能优化*...

    java语言程序设计 java编程基础入门教程资料 (1)JAVA语言程序设计 共19页.pptx

    - **流的概念**:流是一种从源头到目的地的数据传输通道。 - **输入流与输出流**:根据数据流动方向的不同,可以分为输入流和输出流。 - **文件流与缓冲流**:FileInputStream/FileOutputStream用于读写文件,...

    Python脚本在湖南省第三次国土调查数据库自检中的应用.zip

    在数据库自检中,可能需要将结果导出为报告文件,或者从文件中读取初始数据。 9. 并行处理:如果数据库规模庞大,Python的multiprocessing或concurrent.futures库可以用来实现多线程或多进程并行处理,加快数据检查...

    进程浏览器

    它允许用户在任意时间点捕获当前系统中所有运行进程的状态信息,包括但不限于进程ID、优先级、内存使用情况、CPU占用率等。这种快照功能对于诊断性能问题、跟踪恶意软件活动或分析系统行为变化时非常有用。通过保存...

    JDK6API中文参考手册

    11. **异常链**:允许一个异常对象包含另一个异常作为其原因,这样可以在捕获和处理异常时更好地追踪问题的源头。 12. **并发工具类**:Java并发包(java.util.concurrent)在JDK6中得到了丰富,提供了并发容器如...

    程序崩溃源码定位

    操作系统会在这些异常发生时生成一个异常记录,包含异常类型、线程信息和调用堆栈等。CrashFinder可能利用这些信息来追踪崩溃的源代码行。 2. **调试信息**:为了准确地定位到源代码,CrashFinder可能需要程序的...

Global site tag (gtag.js) - Google Analytics