共计 819 个字符,预计需要花费 3 分钟才能阅读完成。
遇到问题
- 自定义异样:LogicExcetion
- 在办法调用的最外层 method.invoke() 处 catch(LoginException e)
- 办法抛 LogicExcetion 未被捕捉,控制台输入 InvocationTargetException
剖析起因
如图:
反射办法只返回以上几种异样,其中 InvocationTargetException 的形容:如果底层办法抛出一个异样,则会封账在该异样中进行抛出
解决问题
InvocationTargetException 异样中的变量 target 即为底层办法抛出的异样,所以能够这样批改,贴源码:
try {Object res = method.invoke(handler, params);
if (res instanceof Message) {Message message = (Message) res;
session.sendPacket(message);
}
} catch (SecurityException | IllegalAccessException | IllegalArgumentException e) {e.printStackTrace();
} catch (InvocationTargetException e) {Throwable cause = e.getCause();
if (cause instanceof LogicException) {LogicException le = (LogicException) cause;
switch (le.getType()) {
case CLIENT_EXCEPTION:
session.sendPacket(new ResLogicError(le.getMsg()));
break;
case LOGIC_EXCEPTION:
logger.error("代码逻辑谬误:{}", le.getMsg());
break;
default:
break;
}
}
}
最初
集体简略了解,不对之处还望斧正!
正文完