Java_Prompt_getLine(JNIEnv *envjobject obj jstring prompt) {
char buf128];
const jbyte *str;
str = (*env)->GetStringUTFChars(envpromptNULL);
if (str == NULL) {
return NULL/* OutOfMemoryError already thrown */ }
printf("%s"str); (*env)->ReleaseStringUTFChars(envpromptstr);
/* We assume here that the user does not type more than
* 127 characters */
scanf("%127s"buf);
return (*env)->NewStringUTF(envbuf); }


记得检测 GetStringUTFChars 的返回值, 因为调用该函数会有内存分配操作, 失败后, 该
函数返回 NULL,并抛 OutOfMemoryError 异常。
如何处理异常,后面会有介绍。 JNI 处理异常,不同于 Java 中的 try...catch。在 JNI 中,
发生异常,不会改变代码执行轨迹, 所以, 当返回 NULL,要及时返回, 或马上处理异常

1、调用 ReleaseStringUTFChars 释放 GetStringUTFChars 中分配的内存(Unicode -> UTF-8
转换的原因) 。

2、使用 JNIEnv->NewStringUTF 构造 java.lang.String;如果此时没有足够的内存,
NewStringUTF 将抛 OutOfMemoryError 异常, 同时返回 NULL。













	
色迷迷 哭 呕吐 大笑 口水 微笑 啵一个 发怒

Hi,您需要填写昵称和邮箱!

  • 必填项
  • 必填项