jni下的捕获异常失败

在JNI下只能捕捉Throwable类的异常,如果捕捉Exception类的异常是进不到catch方法里的。

try {
    logger.info("dll文件读取成功");
} catch (Throwable e) { // JNI只能捕捉到Throwable异常
    e.printStackTrace();
    logger.error("dll文件读取失败");
}

原因猜测可能是因为JNI下出现异常是委托给Error类(用来处理程序运行环境方面的异常,比如,虚拟机错误、装载错误和连接错误,这类异常主要是和硬件有关的,而不是由程序本身抛出的),而Throwable类是Error类的父类(Java语言要求java程序中(无论是谁写的代码)所有抛出(throw)的异常都必须是从Throwable派生而来),也就能往下兼容而捕捉到异常。

因此如果发现在JNI下捕获异常失败,只要将捕捉的Exception类换成Throwable类(或Error类)即可。

"世事无常,但我依然爱你。"

你要去做一个大人,不要回头,不要难过。
原文地址:https://www.cnblogs.com/yanggb/p/14779509.html