🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 异常处理 > 核心`1.10.7`中增加,为测试状态。测试状态中可能会出现最终的稳定状态与测试状态内容有偏差的情况。预计于核心`1.11.x`或者`1.12.x`中将内容稳定下来。 核心`1.10.7`之后,我为监听函数增加了异常处理机制。 ## **使用方法** 写一个类,实现`com.forte.qqrobot.listener.error.ExceptionHandle` (即 `ExceptionHandle`)接口,并标注`@ExceptionCatch(...)`注解。例如: ```java /** * 捕获空指针异常 */ @ExceptionCatch(NullPointerException.class) public class TestExHandler implements ExceptionHandle { /** * 进行异常处理 * * @param context 异常捕获对象封装 * @return 异常处理后的响应结果。 */ @Override public Object handle(ExceptionHandleContext context) { System.out.println("异常捕获!"); System.out.println(context.getId()); System.out.println(context.getSort()); System.out.println(context.getMsgGet()); System.out.println(context.getMsgSender()); System.out.println(context.getListenContext()); final Class<? extends Throwable> aClass = context.getException().getClass(); System.out.println(aClass); final String localizedMessage = context.getException().getLocalizedMessage(); System.out.println(localizedMessage); context.getMsgSender().SENDER.sendPrivateMsg(你的大号QQ, "出现异常!\n" + aClass + "\n" + localizedMessage); // 返回任意值,形同于在监听函数中的返回值。 // 没什么想返回的可以直接返回一个null。 return true; } } ``` 其中,注解`@ExceptionCatch`的参数`value`为: ```java /** 捕获的异常类型,默认为{@link Exception}类型 */ Class<? extends Exception>[] value() default java.lang.Exception.class; ``` 是一个异常类型的数组,默认为`Exception.class`。很好理解,这代表了它将会捕获的异常类型。 <br> >[danger] **注意!一种异常类型只能对应一个`ExceptionHandle`实现!**