天天看点

捕获System.loadLibrary()产生的异常

今天在工作中想捕获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所有抛出的异常和错误就可以做出相应的逻辑