异常操作

来源:互联网 发布:网络教育可以考研 编辑:程序博客网 时间:2024/06/05 19:48

   这个JNIENV接口提供了一套与异常相关的函数。

   public class JavaClass {
   /**
    * Throwing method.
  */
   private void throwingMethod() throws NullPointerException {
   throw new NullPointerException("Null pointer");
   }
   /**
   * Access methods native method.
  */
  private native void accessMethods();
  }

   这个accessMethods本地方法需要明确的做异常处理,当调用throwingMethod方法。这个JNI提供了ExceptionOccurred方法来查询虚拟机是否有异常。这个异常处理需要明确的使用ExceptionClear函数来清除它。

  jthrowable ex;
  ...
 (*env)->CallVoidMethod(env, instance, throwingMethodId);
 ex = (*env)->ExceptionOccurred(env);
 if (0 != ex) {
 (*env)->ExceptionClear(env);
 /* Exception handler. */
 }

抛出异常

这JNI允许本地的代码来抛出异常。因为异常时Java类,这必须首先使用FindClass函数来获得。这个ThrowNew函数能够被用来初始化和抛出这新的异常。

  jclass clazz;
  ...
  clazz = (*env)->FindClass(env, "java/lang/NullPointerException");
  if (0 ! = clazz) {
         (*env)->ThrowNew(env, clazz, "Exception message.");
  }

本地函数的代码执行并不在虚拟机的控制下,抛出一个异常并不会阻止本地函数的执行和把控制转到异常处理器。基于抛出的 异常,本地方法应该释放任何已经分配的本地资源,例如内存等。

0 0