繁体   English   中英

Java方法从C ++ JNI NDK函数调用两次

[英]Java method called twice from C++ JNI NDK function

我有一些C ++ NDK代码通过JNI调用Java方法。 我遇到的问题是我的Java方法被调用了两次。 似乎一旦我使用GetMethodID获取方法的句柄,然后使用该方法ID调用env-> NewObject,我的java函数被调用。

当我调用env-> CallVoidMethod(obj,mid)时,显然会调用它。 我只是不确定为什么在创建NewObject时调用它?

C++ Code: 
---------
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved)
{
    jvm = vm;
    start();
    return JNI_VERSION_1_6;
}

void start() {    
    JNIEnv *env = NULL;
    jvm->GetEnv((void**)&env, JNI_VERSION_1_6);
    jclass cls = env->FindClass("com/test/Test");
    jmethodID mid = env->GetMethodID(cls, "StartApp", "()V");
    jobject obj = env->NewObject(cls, mid);

    if (mid != 0){
       env->CallVoidMethod(obj, mid);
    }
}       

Java Code:
----------
 public void StartApp(){
     android.util.Log.e("Test", "Java Method Called from Native");
 }

NewObject将构造函数作为参数,所以

jobject obj = env->NewObject(cls, mid);

这将调用第一个StartApp() ,但请注意,因为它不是一个正确的构造函数,这将导致您遇到麻烦。

对于构造函数,根据手册, 必须通过调用GetMethodID()并使用<init>作为方法名称并将void(V)作为返回类型来获取此ID。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM