对线程中未捕获的异常进行处理UncaughtExceptionHandler
通常程序中我们会对可能出现的异常进行捕获,例如
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相关推荐
- 加了try的情况下线程中抛出未捕获的异常
一.问题描述 项目中线程中明明加了try catch 捕获异常,但是一启动就报未捕获的异常导致整个程序崩溃. 下面是windows中的错误日志. Application: 岗亭收费.exe Frame ...
- android捕获线程异常,android - 终结器引发的未捕获的异常:所有WebView方法必须在同一线程上调用。 (预期的Looper) - 堆栈内存溢出...
我正在使用Admob SDK 18.1.1 并获得错误终结器抛出未捕获的异常 java.lang.RuntimeException: java.lang.Throwable: A WebView me ...
- Enterprise Library 2.0 技巧(3):记录ASP.NET站点中未处理的异常
这篇文章不能算是Enterprise Library 2.0的一个技巧,只是Logging Application Block的一个简单应用而已,在这里我们使用Logging Application ...
- UncaughtExceptionHandler:java未捕获的异常/错误默认处理方式
UncaughtExceptionHandler:java未捕获的异常/错误 @(JAVA)[java] java有一部分异常属于运行时异常,这类异常发生时通过会导致程序发生错误,导致退出.如数据下标 ...
- 获取线程中抛出的异常信息
1 ScheduledExecutorService service = Executors.newScheduledThreadPool(10); 2 // 从现在开始delay毫秒之后,每隔一天执 ...
- c#处理未捕获的异常(UnhandledException)
c#处理未捕获的异常(UnhandledException) 参考文章: (1)c#处理未捕获的异常(UnhandledException) (2)https://www.cnblogs.com/ya ...
- 未捕获的异常 'NSInternalInconsistencyException'
实现功能 通过下面的代码,需要在iOS设备屏幕的一角中显示文本"hellow xcode": - (BOOL)application:(UIApplication *)applic ...
- php 7 pdoexception,关于php:未捕获的异常’PDOException’
我试图使用PDO连接数据库,下面的代码可以正常工作 $koneksi = new PDO("mysql:host=localhost;dbname=tggamin1_ucp",&q ...
- android 三星 oom,android - 终结者抛出未捕获的异常:谷歌API错误或三星内核错误? - 堆栈内存溢出...
在我的Galaxy Tab 2(三星)上启动我的应用程序时,我一直收到此错误. 我正在开发的应用程序非常复杂,很难找到此错误源自何处. 所以我开始逐个删除我的应用程序,我最终得到了一个mapview应 ...
最新文章
- JDK的环境变量配置
- JAVA显式锁,各种锁分类
- 关于html5的几个新标签在IE9之前不支持的解决办法
- html dom概念,js学习之HTML DOM的一些基础概念
- 项目管理软件伙伴https://www.huobanyun.cn/
- 会议 | CCKS 2019 全国知识图谱与语义计算大会在杭州隆重召开
- 中值滤波去除图像噪声的matlab程序
- MySQL增强版命令行客户端连接工具(mycli)
- TcpTrace追踪远程服务器的soap信息
- CSS中设置height:100%无效的解决方案
- webstorm如何支持markdown
- 简单整蛊室友,只需几行bat病毒代码
- 【数学】嵌入式开发中涉及到的对数公式
- 信息安全等级测评内容
- 手把手教你一小时设计基于matlab的信号发生器GUI界面(1)
- 【水题】hzy 和zsl 的生存挑战
- 开源问答社区软件Answer
- 正则表达式之贪婪匹配和懒惰匹配
- 字符串中的 ↵ 回车符替换
- 备考计算机软件,2018年计算机软件水平考试备考心得
热门文章
- 5个常用的CMD命令
- Django进阶教程
- PAT | 1025 反转链表 (25分)【超时问题 + 柳神代码】
- 判断手势_科目一题库里的4道难题,拿不到满分也正常,交警手势不好判断
- Axon Framework简介
- C#毕业设计——基于C#+asp.net+SQL Server的电子书城系统设计与实现(毕业论文+程序源码)——电子书城系统
- DataGrip如何将创建的console保存路径设置到指定目录?
- nonce值是什么?(Number once)(Number used once)cnonce(client nonce)(一个只被使用一次的任意或非重复的随机数值)
- 判断map的key的value是否为空
- SharpSCADA - 工控网关, 轻量级组态软件(笔记)