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

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. MD5加密解密帮助类
  2. FUNCTION MODULE 'LDB_PROCESS' 实例讲解
  3. groovy lambda_Java Lambda流和Groovy Clouse的比较
  4. 织梦同步静态文件到服务器,某猫织梦插件-织梦dedecms静态文件生成速度的区块插件...
  5. 第4章 旋转的圆弧(《Python趣味创意编程》教学视频)
  6. awk 系列Part7:awk 怎么从标准输入(STDIN)读取输入
  7. java静态类_Java静态类
  8. Sandcastle Help File Builder(.NET帮助文档工具)的版本选择心得——支持VS2010至VS2015,高版本项目文件问题...
  9. 关于springMVC的日志管理
  10. 终于有一次,排名没有进步
  11. 强大的诺顿扼杀了alexa工具条
  12. 怎么看待小公司的规章制度?
  13. ltm是什么门的缩写_ltm的含义,ltm是什么的缩写,ltm的词语,ltm代表的意思
  14. 从头到尾彻底理解KMP(转载自July)
  15. 【云原生|中间件】我们为什么要使用DCM?
  16. 通用Excel数据导入功能模板
  17. 点击箭头向下 向右切换的方法
  18. 气压传感器c语言程序,气压芯片参数——以气压传感器芯片DSH553为例
  19. 魅族Android10内测招募答案,魅族flyme9内测招募答案
  20. python坑爹的黑店_曝光米兰爱马仕黑店极其坑爹配货经验!大家不要再白白上当了!...

热门文章

  1. caffe2 安装填坑ing
  2. jQuery移除或禁用html元素的点击事件
  3. metaball公式_Houdini 节点解释
  4. eclipsepython插件_Eclipse安装配置PyDev插件
  5. 简历之精通 熟练 掌握 熟悉 了解
  6. Depthwise卷积与Pointwise卷积
  7. 市场因子(Market Factor)——投资组合分析(EAP.portfolio_analysis)
  8. python包离线安装教程_离线安装python包(附示例:featuretools)
  9. 入职新人如何快速了解业务
  10. 【JS】对象数组去重+查重+合并同类项