通常程序中我们会对可能出现的异常进行捕获,例如

public static void main(String[] args) {System.out.println("##### begin");int dividend = 10;int divisor = 0;try {int result = dividend / divisor;} catch (Exception e) {System.out.println(e);}System.out.println("##### end");
}

输出结果

##### begin
java.lang.ArithmeticException: / by zero
##### end

如果程序中我们没有对可能出现的异常进行捕获,例如

public static void main(String[] args) {System.out.println("##### begin");int dividend = 10;int divisor = 0;int result = dividend / divisor;System.out.println("##### end");}

输出结果

##### begin
Exception in thread "main" java.lang.ArithmeticException: / by zeroat com.yzj.ehr.controller.InnerController.main(InnerController.java:153)

Thread类有个方法setUncaughtExceptionHandler(UncaughtExceptionHandler eh),表示我们可以对一个线程自定义自己的未捕获异常处理器。
我们只需写一个类继承UncaughtExceptionHandler接口,重写void uncaughtException(Thread t, Throwable e)方法,然后传入到Thread对象中。

public static void main(String[] args) {Thread.currentThread().setUncaughtExceptionHandler(new UncaughtExceptionHandler() {@Overridepublic void uncaughtException(Thread t, Throwable e) {System.out.println("这是对未捕获的异常进行处理方法");System.out.println("Thread name:" + t.getName() + ",ex:" + e);}});System.out.println("##### begin");int dividend = 10;int divisor = 0;int result = dividend / divisor;System.out.println("##### end");}

输出结果

##### begin
这是对未捕获的异常进行处理方法
Thread name:main,ex:java.lang.ArithmeticException: / by zero

对不同线程定义不同的未捕获异常处理器

public static void main(String[] args) {// 定义main线程的Thread.currentThread().setUncaughtExceptionHandler(new UncaughtExceptionHandler() {@Overridepublic void uncaughtException(Thread t, Throwable e) {System.out.println("这是对main线程中未捕获的异常进行处理方法");System.out.println("@ Thread name:" + t.getName() + ",ex:" + e);}});System.out.println("##### begin");new Thread(new Runnable() {@Overridepublic void run() {// 定义myThread线程的Thread.currentThread().setUncaughtExceptionHandler(new UncaughtExceptionHandler() {@Overridepublic void uncaughtException(Thread t, Throwable e) {System.out.println("这是对myThread线程中未捕获的异常进行处理方法");System.out.println("# Thread name:" + t.getName() + ",ex:" + e);}});try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e1) {e1.printStackTrace();}// 模拟异常int[] array = new int[2];int value = array[2];}}, "myThread").start();int dividend = 10;int divisor = 0;int result = dividend / divisor;System.out.println("##### end");}

输出结果

##### begin
这是对main线程中未捕获的异常进行处理方法
@ Thread name:main,ex:java.lang.ArithmeticException: / by zero
这是对myThread线程中未捕获的异常进行处理方法
# Thread name:myThread,ex:java.lang.ArrayIndexOutOfBoundsException: 2

对线程中未捕获的异常进行处理UncaughtExceptionHandler相关推荐

  1. 加了try的情况下线程中抛出未捕获的异常

    一.问题描述 项目中线程中明明加了try catch 捕获异常,但是一启动就报未捕获的异常导致整个程序崩溃. 下面是windows中的错误日志. Application: 岗亭收费.exe Frame ...

  2. android捕获线程异常,android - 终结器引发的未捕获的异常:所有WebView方法必须在同一线程上调用。 (预期的Looper) - 堆栈内存溢出...

    我正在使用Admob SDK 18.1.1 并获得错误终结器抛出未捕获的异常 java.lang.RuntimeException: java.lang.Throwable: A WebView me ...

  3. Enterprise Library 2.0 技巧(3):记录ASP.NET站点中未处理的异常

    这篇文章不能算是Enterprise Library 2.0的一个技巧,只是Logging Application Block的一个简单应用而已,在这里我们使用Logging Application ...

  4. UncaughtExceptionHandler:java未捕获的异常/错误默认处理方式

    UncaughtExceptionHandler:java未捕获的异常/错误 @(JAVA)[java] java有一部分异常属于运行时异常,这类异常发生时通过会导致程序发生错误,导致退出.如数据下标 ...

  5. 获取线程中抛出的异常信息

    1 ScheduledExecutorService service = Executors.newScheduledThreadPool(10); 2 // 从现在开始delay毫秒之后,每隔一天执 ...

  6. c#处理未捕获的异常(UnhandledException)

    c#处理未捕获的异常(UnhandledException) 参考文章: (1)c#处理未捕获的异常(UnhandledException) (2)https://www.cnblogs.com/ya ...

  7. 未捕获的异常 'NSInternalInconsistencyException'

    实现功能 通过下面的代码,需要在iOS设备屏幕的一角中显示文本"hellow xcode": - (BOOL)application:(UIApplication *)applic ...

  8. php 7 pdoexception,关于php:未捕获的异常’PDOException’

    我试图使用PDO连接数据库,下面的代码可以正常工作 $koneksi = new PDO("mysql:host=localhost;dbname=tggamin1_ucp",&q ...

  9. android 三星 oom,android - 终结者抛出未捕获的异常:谷歌API错误或三星内核错误? - 堆栈内存溢出...

    在我的Galaxy Tab 2(三星)上启动我的应用程序时,我一直收到此错误. 我正在开发的应用程序非常复杂,很难找到此错误源自何处. 所以我开始逐个删除我的应用程序,我最终得到了一个mapview应 ...

最新文章

  1. JDK的环境变量配置
  2. JAVA显式锁,各种锁分类
  3. 关于html5的几个新标签在IE9之前不支持的解决办法
  4. html dom概念,js学习之HTML DOM的一些基础概念
  5. 项目管理软件伙伴https://www.huobanyun.cn/
  6. 会议 | CCKS 2019 全国知识图谱与语义计算大会在杭州隆重召开
  7. 中值滤波去除图像噪声的matlab程序
  8. MySQL增强版命令行客户端连接工具(mycli)
  9. TcpTrace追踪远程服务器的soap信息
  10. CSS中设置height:100%无效的解决方案
  11. webstorm如何支持markdown
  12. 简单整蛊室友,只需几行bat病毒代码
  13. 【数学】嵌入式开发中涉及到的对数公式
  14. 信息安全等级测评内容
  15. 手把手教你一小时设计基于matlab的信号发生器GUI界面(1)
  16. 【水题】hzy 和zsl 的生存挑战
  17. 开源问答社区软件Answer
  18. 正则表达式之贪婪匹配和懒惰匹配
  19. 字符串中的 ↵ 回车符替换
  20. 备考计算机软件,2018年计算机软件水平考试备考心得

热门文章

  1. 5个常用的CMD命令
  2. Django进阶教程
  3. PAT | 1025 反转链表 (25分)【超时问题 + 柳神代码】
  4. 判断手势_科目一题库里的4道难题,拿不到满分也正常,交警手势不好判断
  5. Axon Framework简介
  6. C#毕业设计——基于C#+asp.net+SQL Server的电子书城系统设计与实现(毕业论文+程序源码)——电子书城系统
  7. DataGrip如何将创建的console保存路径设置到指定目录?
  8. nonce值是什么?(Number once)(Number used once)cnonce(client nonce)(一个只被使用一次的任意或非重复的随机数值)
  9. 判断map的key的value是否为空
  10. SharpSCADA - 工控网关, 轻量级组态软件(笔记)