当前位置: 首页 > 后端技术 > Java

当自定义异常遇到反射时

时间:2023-04-01 18:06:36 Java

遇到了问题。自定义异常:LogicException在方法调用的最外层method.invoke()处被捕获(LoginExceptione)。该方法抛出LogicException并且未被捕获。控制台输出InvocationTargetException。分析原因如图:反射方法只返回上面的异常,其中InvocationTargetException的说明:如果底层方法抛出异常,会关闭,在异常中抛出,解决问题。InvocationTargetException异常中的变量target是底层方法抛出的异常,所以可以这样修改,贴上源码:try{Objectres=method.invoke(handler,params);if(resinstanceofMessage){Messagemessage=(Message)res;session.sendPacket(消息);}}catch(InvocationTargetExceptione){Throwablecause=e.getCause();if(causeinstanceofLogicException){LogicExceptionle=(LogicException)原因;switch(le.getType()){caseCLIENT_EXCEPTION:session.sendPacket(newResLogicError(le.getMsg()));休息;案例ILLEGAL_EXCEPTION:session.sendPacket(newResLogicError(le.getMsg()));logger.error("非法客户端操作或代码逻辑错误",cause);休息;默认值:中断;}}else{logger.error("消息执行失败",e);}}catch(Exceptione){logger.error("消息执行失败",e);}最后说下简单的理解,不对的地方还请大家指正!