最近遇到一个问题,就是当程序从C反调用JAVA,运行到s_vm->DetachCurrentThread();时异常退出。背景:我们是做了一个Anodroid利用了PhoneGap技术做的APP应用。其中通过画面JS调运PhoneGap,PhoneGap调用Java方法,再通过Java调用C++代码。

解决方案 »

  1.   

    骚年,没有attachCurrentThread( 就不需要DetachCurrentThread
    具体还是上代码吧
      

  2.   

    s_vm->AttachCurrentThread((JNIEnv**) &envCcallJ, (void*) &arg);
    jstring arg1 = (envCcallJ)->NewStringUTF(deviceId.c_str());
            jstring desiredClassName = (envCcallJ)->NewStringUTF("ControllerStack");
    jclass cls = envCcallJ->GetObjectClass(gCL);
    jmethodID mid = envCcallJ->GetMethodID(cls, "loadClass", "(Ljava/lang/String;)Ljava/lang/Class;"); jclass desiredClass = (jclass) envCcallJ->CallObjectMethod(gCL, mid, desiredClassName);
    jmethodID desiredMid = envCcallJ->GetStaticMethodID(desiredClass, "CcallJava_info", "(Ljava/lang/String;)V");
    envCcallJ->CallStaticObjectMethod(desiredClass, desiredMid, arg1); envCcallJ->DeleteLocalRef(desiredClass);
    envCcallJ->DeleteLocalRef(cls);
    const char *pStr0 = envCcallJ->GetStringUTFChars(desiredClassName, 0);
    envCcallJ->ReleaseStringUTFChars(desiredClassName, pStr0);
    envCcallJ->DeleteLocalRef(desiredClassName);
    const char *pStr1 = envCcallJ->GetStringUTFChars(arg1, 0);
    envCcallJ->ReleaseStringUTFChars(arg1, pStr1);
    envCcallJ->DeleteLocalRef(arg1);
    s_vm->DetachCurrentThread();
      

  3.   

    另外想问下,有 AttachCurrentThread一定要 DetachCurrentThread吗?
    看网上一些例子好像有些没有写DetachCurrentThread
      

  4.   

    给点log    log