как использовать JNI ThrowNew ()? - PullRequest
0 голосов
/ 04 августа 2020

У меня есть такой метод:

extern "C"
JNIEXPORT  jint JNICALL
Java_tt_reducto_ndksample_StringTypeOps_exception
        (JNIEnv *env, jobject jobj) {
    (env)->ExceptionClear();
    jclass exception_cls = (env)->FindClass("java/lang/IllegalArgumentException");
    (env)->ThrowNew(exception_cls, "key0 is not invalid");

    return -1;

}

сработало. но если вернуть jstring следующим образом:

extern "C"
JNIEXPORT  jstring JNICALL
Java_tt_reducto_ndksample_StringTypeOps_exception
        (JNIEnv *env, jobject jobj) {

    (env)->ExceptionClear();
    jclass exception_cls = (env)->FindClass("java/lang/IllegalArgumentException");
    (env)->ThrowNew(exception_cls, "key0 is not invalid");
    return env->NewStringUTF("22");

}

, он был раздавлен.

 JNI DETECTED ERROR IN APPLICATION: JNI ThrowNew called with pending exception java.lang.IllegalArgumentException: key0 is not invalid

я пытался поймать:

 try {
                 StringTypeOps.exception()
            }catch (e: java.lang.Exception) {
                Log.d("::","Exception")
                e.printStackTrace()
            }

Я не уверен, что есть ограничения на использование функции ThrowNew ()

...