UncaughtExceptionHandler:java未捕获的异常/错误

@(JAVA)[java]

java有一部分异常属于运行时异常,这类异常发生时通过会导致程序发生错误,导致退出。如数据下标过大,内存不足等。

对于这类异常,默认的情况是打印相关的错误stack,然后退出程序。但这对于用户而言十分不友好;另外,有可以发生异常或者错误时不希望程序退出。

此时可以为线程添加一个默认的异常处理器。

主要使用

Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {public void uncaughtException(Thread thread, Throwable thrown) {.....}
}

来处理未捕获的异常。也可以使用setUncaughtExceptionHandler,但这只对当前线程生效,default的话默认对所有线程生效。

另注意,Error和Exception 都实现了Throwable,而它们之间没有直接关系

public class UncaughtExceptionHandlerDemo {private static Logger LOG = LoggerFactory.getLogger(UncaughtExceptionHandlerDemo.class);public static void main(String[] args) {setupDefaultUncaughtExceptionHandler();//NO argument pass to main, so ArrayIndexOutOfBoundsException will occur.System.out.println(args[1]);}public static void setupDefaultUncaughtExceptionHandler() {Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {public void uncaughtException(Thread thread, Throwable thrown) {try {handleUncaughtException(thrown);} catch (Error err) {// LOG.error("Received error in main thread.. terminating server...", err);System.err.println("Received error in main thread.. terminating server..." + err);Runtime.getRuntime().exit(-2);}catch(Exception e){System.err.println("Exception happen. Cause:  " + e.getMessage());e.printStackTrace();}}});}public static void handleUncaughtException(Throwable t) throws Exception {if (t != null && t instanceof Error) {if (t instanceof OutOfMemoryError) {try {System.err.println("Halting due to Out Of Memory Error..." + Thread.currentThread().getName());} catch (Throwable err) {//Again we don't want to exit because of logging issues.}Runtime.getRuntime().halt(-1);} else {//Running in daemon mode, we would pass Error to calling thread.throw (Error) t;}}else{throw (Exception) t;}}}

UncaughtExceptionHandler:java未捕获的异常/错误默认处理方式相关推荐

  1. java: 未报告的异常错误org.json.JSONException; 必须对其进行捕获或声明以便抛出

    问题: 在springboot项目使用IDE启动的时候,报的 java: 未报告的异常错误org.json.JSONException; 必须对其进行捕获或声明以便抛出 思考: 出现此问题的代码如下 ...

  2. java: 未报告的异常错误java.lang.IllegalAccessException; 必须对其进行捕获或声明以便抛出

    java: 未报告的异常错误java.lang.IllegalAccessException; 必须对其进行捕获或声明以便抛出 错误截图 解决办法 1.在报错所在行所属的方法后加上`throws Ex ...

  3. IDEA编译报错:java: 未报告的异常错误X; 必须对其进行捕获或声明以便抛出

    IDEA编译Flink源码时报错: java: 未报告的异常错误X; 必须对其进行捕获或声明以便抛出 原因是环境变量配置的是JDK8,Flink部分代码是基于JDK11编写的,将JDK升级为JDK11 ...

  4. Optional orElseThrow 错误: 未报告的异常错误X; 必须对其进行捕获或声明以便抛出...

    情况说明 以下代码: Optional.ofNullable(u).map(u->{.... }).orElseThrow(()->{throw new CommonException(& ...

  5. 错误:未报告的异常错误,必须对其进行捕获或声明以便抛出

    错误:未报告的异常错误,必须对其进行捕获或声明以便抛出 出现错误:是因为没有对异常进行捕获或声明 首先说一下Java 中throws的作用: 假如函数部分有不合法的异常,例如分母为0: import ...

  6. 出现“未报告的异常错误,必须对其进行捕获或声明以便抛出”的解决

    错误:未报告的异常错误,必须对其进行捕获或声明以便抛出 出现错误:是因为没有对异常进行捕获或声明 首先说一下Java 中throws的作用: 假如函数部分有不合法的异常,例如分母为0: import ...

  7. 对线程中未捕获的异常进行处理UncaughtExceptionHandler

    通常程序中我们会对可能出现的异常进行捕获,例如 public static void main(String[] args) {System.out.println("##### begin ...

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

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

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

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

最新文章

  1. Deep Residual Learning for Image Recognition(ResNet)论文翻译及学习笔记
  2. asp.net(c#)将彩色图片变灰阶图片
  3. Java 12 将于3月19日发布,8 个最终 JEP 一览
  4. (66)SPI外设驱动发送驱动(五)(第14天)
  5. Repeater使用:绑定时 结合 前台JS及后台共享方法
  6. WebRTC-集成qsv硬解码实现
  7. Cython基础--Cython入门
  8. 图解 Elasticsearch 写入流程
  9. 小学生python编程教程-Python适合小学生学的编程语言
  10. matlab 矩阵 黑白,各位好 请问怎么用0 1矩阵画出黑白的矩阵如下图所示
  11. 远程连接VirtualBox 虚拟机
  12. 《天才在左,疯子在右》读书随笔
  13. windows win7电脑搜索功能失效怎么修复
  14. 大数据第一课(满分作业)——泰坦尼克号生存者预测(Titanic - Machine Learning from Disaster)
  15. 登陆模块之JWT单点登录
  16. centos7安装harbor详细教程
  17. matlab计算全球价值链的程序,全球价值链核算程序与指标数据库公开
  18. 西门子PLC走马灯程序
  19. 三、FSAS + Novatel接收机和相机时间同步、数据保存、解码等 细节说明
  20. 基于联邦学习的多源异构数据融合算法

热门文章

  1. 对于半结构化数据的讲解,这可能是最通俗易懂的一篇文章了
  2. 【详解!思路清晰】1095 解码PAT准考证 (25分)
  3. 神奇的sstream头文件(整型与字符串自由转换)
  4. Web前端开发笔记——第二章 HTML语言 第五节 图像标签
  5. mysql 1100_mysql数据库选择,有1100个用户,每个用户每月生成一张表,使用中该表内每秒上传一条数据,数据量很大...
  6. 辽宁交通高等专科学校有计算机专业吗,辽宁省交通高等专科学校可以转专业吗,辽宁省交通高等专科学校新生转专业政策...
  7. python中的matplotlib.pyplot_python matplotlib中axes与axis的区别?
  8. linux安装mysql5.6.14_(四)Zabbix_linux安装mysql5.6
  9. c语言的上级步骤,数据结构 上级程序一(C语言).doc
  10. c语言常量x,C语言的数据、常量和变量