我试图从NDK代码调用java方法。 C ++代码是:
extern "C" JNIEXPORT jboolean JNICALL
Java_com_lipman_whiteboard_CameraProcessing_processBitmap(JNIEnv * env, jobject obj)
{
jclass callingClass = env->GetObjectClass(obj);
jmethodID mid = env->GetMethodID(callingClass, "setProgressMax", "(I)V");
env->CallVoidMethod(obj, mid, 7);
}
“mid”在上面的代码段中始终为null。 java类的相关部分是:
public class CameraProcessing
{
private static native boolean processBitmap();
private void setProgressMax(int max)
{
}
有谁知道为什么“mid”总是空的?我做错了什么?
答案 0 :(得分:3)
您已将本机processBitmap()
方法声明为静态,这意味着第二个参数是jclass
而不是jobject
。当您致电GetObjectClass
时,您实际上正在获取jclass
的课程,这意味着callingClass
只是java.lang.Class
,而没有定义setProgressMax
方法。应该有一个待处理的异常,并附上相应的消息。
将声明更改为:
private native boolean processBitmap();
再试一次。
调用私有方法不应该是JNI的问题。
另外,请确保在CallVoidMethod
返回后检查例外情况。