今天在工作中想捕获System.loadLibrary()产生的异常,
开始时:
try {
System.loadLibrary("LKT5103JNI");
} catch (Exception e) {
log.debug("##load LKT JNI failed!");
}
就是获取不到,然后修改如下:
try {
System.loadLibrary("LKT5103JNI");
} catch (Throwable e) {
log.debug("##load LKT JNI failed!");
}
分析:
Throwable 类是 Java 语言中所有错误或异常的超类。只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java throw 语句抛出。类似地,只有此类或其子类之一才可以是 catch 子句中的参数类型。两个子类的实例,Error和Exception。然后再看loadLibrary方法:加载由 libname 参数指定的系统库。将库名映射到实际系统库的方法取决于系统。 调用 System.loadLibrary(name) 实际上等效于调用:
Runtime.getRuntime().loadLibrary(name)
会抛出:
SecurityException - 如果安全管理器存在并且其 checkLink 方法不允许加载指定的动态库。
UnsatisfiedLinkError - 如果库不存在。
NullPointerException - 如果 libname 为 null
所以用Throwable包含了loadLibrary所有抛出的异常和错误就可以做出相应的逻辑
开始时:
try {
System.loadLibrary("LKT5103JNI");
} catch (Exception e) {
log.debug("##load LKT JNI failed!");
}
就是获取不到,然后修改如下:
try {
System.loadLibrary("LKT5103JNI");
} catch (Throwable e) {
log.debug("##load LKT JNI failed!");
}
分析:
Throwable 类是 Java 语言中所有错误或异常的超类。只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java throw 语句抛出。类似地,只有此类或其子类之一才可以是 catch 子句中的参数类型。两个子类的实例,Error和Exception。然后再看loadLibrary方法:加载由 libname 参数指定的系统库。将库名映射到实际系统库的方法取决于系统。 调用 System.loadLibrary(name) 实际上等效于调用:
Runtime.getRuntime().loadLibrary(name)
会抛出:
SecurityException - 如果安全管理器存在并且其 checkLink 方法不允许加载指定的动态库。
UnsatisfiedLinkError - 如果库不存在。
NullPointerException - 如果 libname 为 null
所以用Throwable包含了loadLibrary所有抛出的异常和错误就可以做出相应的逻辑