今天在工作中想捕獲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所有抛出的異常和錯誤就可以做出相應的邏輯