对线程中未捕获的异常进行处理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应 ...
最新文章
- MD5加密解密帮助类
- FUNCTION MODULE 'LDB_PROCESS' 实例讲解
- groovy lambda_Java Lambda流和Groovy Clouse的比较
- 织梦同步静态文件到服务器,某猫织梦插件-织梦dedecms静态文件生成速度的区块插件...
- 第4章 旋转的圆弧(《Python趣味创意编程》教学视频)
- awk 系列Part7:awk 怎么从标准输入(STDIN)读取输入
- java静态类_Java静态类
- Sandcastle Help File Builder(.NET帮助文档工具)的版本选择心得——支持VS2010至VS2015,高版本项目文件问题...
- 关于springMVC的日志管理
- 终于有一次,排名没有进步
- 强大的诺顿扼杀了alexa工具条
- 怎么看待小公司的规章制度?
- ltm是什么门的缩写_ltm的含义,ltm是什么的缩写,ltm的词语,ltm代表的意思
- 从头到尾彻底理解KMP(转载自July)
- 【云原生|中间件】我们为什么要使用DCM?
- 通用Excel数据导入功能模板
- 点击箭头向下 向右切换的方法
- 气压传感器c语言程序,气压芯片参数——以气压传感器芯片DSH553为例
- 魅族Android10内测招募答案,魅族flyme9内测招募答案
- python坑爹的黑店_曝光米兰爱马仕黑店极其坑爹配货经验!大家不要再白白上当了!...
热门文章
- caffe2 安装填坑ing
- jQuery移除或禁用html元素的点击事件
- metaball公式_Houdini 节点解释
- eclipsepython插件_Eclipse安装配置PyDev插件
- 简历之精通 熟练 掌握 熟悉 了解
- Depthwise卷积与Pointwise卷积
- 市场因子(Market Factor)——投资组合分析(EAP.portfolio_analysis)
- python包离线安装教程_离线安装python包(附示例:featuretools)
- 入职新人如何快速了解业务
- 【JS】对象数组去重+查重+合并同类项