如何在JNI中构造一个数组呢? Android开发网给大家一个简单的示例,返回一个整形数组:

  JNIEXPORT jobjectArray JNICALL

  Java_Android123_CwjTest2(JNIEnv *env, jclass clazz)

  {

  jobjectArray result; //定义返回对象

  jclass intArrayClazz = (*env)->FindClass(env, "[I"); //查找整形数组

  if (intArrayClazz == NULL)

  {

  return NULL;

  }

  result = (*env)->NewObjectArray(env, size, intArrayClazz, NULL); //构造一个新的数组对象

  if (result == NULL)

  {

  return NULL;

  }

  for (int i = 0; i < 10 ; i++) //循环10次

  {

  jint szBuffer[256];

  int j;

  jintArray newIntArray = (*env)->NewIntArray(env, 10); //构造10个整形数组

  if (newIntArray == NULL)

  {

  return NULL;

  }

  for (j = 0; j < 10 ; j++) //10个

  {

  szBuffer[j] = i + j;

  }

  (*env)->SetIntArrayRegion(env, newIntArray, 0, 10, szBuffer); //设置长度为10个

  (*env)->SetObjectArrayElement(env, result, i, newIntArray);

  (*env)->DeleteLocalRef(env, newIntArray);

  }

  return result;

  }

  3. JNI中有关异常的处理

  JNI中抛出异常没有try...catch这样的,而是直接抛出错误

  方法1: 使用ThrowNew,比如IOException类发生了FileNotFound

  (*env)->ThrowNew(env,(*env)->FindClass("java/io/IOException"),"CWJLog Error, IOException");

  方法2: 使用Throw,自己构造

  jclass clazz = (*env)->FindClass(env, "java/io/IOException");

  jmethodID methodId = (*env)->GetMethodID(env, clazz, "", "()V");

  jthrowable throwable = (*env)->NewObject(env, clazz, methodId);

  (*env)->Throw(env, throwable);