我正确地使用JNI做了我想做的事情(至少它可以工作!;) )然而,在开发时我使用了一堆断言(只是为了确保每一步都是正确的)
现在我正在实际工作,应该检查哪些返回值,而我可以假设哪些返回值是合理的,而不需要检查
下面是我的一些jni调用使用的一些支持代码
// given a jni env and NVGpaint this creates a java object
// encapsulating the NVGpaint structure (nvg.Paint)
jobject createPaintJobject(JNIEnv *e, NVGpaint p)
{
jclass cls = (*e)->FindClass(e, "nvg$Paint");
assert(cls != NULL);
jmethodID constructor = (*e)->GetMethodID(e, cls, "<init>", "()V");
assert(constructor != NULL);
jobject nvgpaint = (*e)->NewObject(e, cls, constructor);
assert(nvgpaint!=NULL);
jfieldID fid = (*e)->GetFieldID(e, cls,"buff","Ljava/nio/FloatBuffer;");
assert(fid != NULL);
jobject jbuff = (*e)->GetObjectField(e, nvgpaint, fid);
assert(jbuff != NULL);
NVGpaint* ptr = (void*)(*e)->GetDirectBufferAddress(e, jbuff);
assert(ptr!=NULL);
*ptr = p;
return nvgpaint;
}替换这些断言的最佳实践是什么?其中一些断言甚至需要检查吗?
发布于 2015-01-19 10:07:30
替换这些断言的最佳实践是什么?
通过使用异常检查机制,可能比这些断言更好。
env->ExceptionCheck();
env->ExceptionClear();
env->ExceptionDescribe();
env->ExceptionOccurred();实际上,在调用那些可能引发异常的JNI函数时,应该始终进行异常检查。
https://stackoverflow.com/questions/27945271
复制相似问题