2013-03-26 3 views
1

Я получаю сигнал 11 в этой строке:Исключение сигнала 11 с использованием JNI CallBooleanMethod

// Call bool isInternetConnection() 
jboolean jReturnValue = env->CallBooleanMethod(mClass,mid); 

в этой части кода:

/** 
* Check if Internet Connection is ONLINE 
*/ 
bool InterfaceJNI::isInternetConnected() 
{ 
    JavaVM* jvm = JniHelper::getJavaVM(); 
    int status; 
    JNIEnv *env; 
    jmethodID mid; 

    bool isAttached = false; 
    bool returnValue = false; 

    CCLog("InterfaceJNI isInternetConnected"); 

    // Get Status 
    status = jvm->GetEnv((void **) &env, JNI_VERSION_1_6); 

    if(status < 0) 
    { 
     CCLog("isInternetConnected Status < 0 Failed to get JNI Enviroment!!!"); 
     status = jvm->AttachCurrentThread(&env, NULL); 
     CCLog("isInternetConnected Status 2: %d", status); 
     if(status < 0) 
     { 
      CCLog("isInternetConnected Status < 0 !!!"); 
      return false; 
     } 
     isAttached = true; 
     CCLog("isInternetConnected Status isAttached: %d", isAttached); 
    } 

    CCLog("isInternetConnected Status: %d", status); 

    CCLog("isInternetConnected Finding Class...."); 
    jclass mClass = env->FindClass("org/example/SocialNetwork/CCSocialNetwork"); 

    // Get Static bool isInternetConnection() 
    CCLog("isInternetConnected Getting method...."); 
    mid = env->GetMethodID(mClass, "isInternetConnection", "()Z"); 
    if (mid == 0) 
    { 
     CCLog("isInternetConnected FAIL GET METHOD STATIC"); 
     return false; 
    } 
    CCLog("isInternetConnected Calling method...."); 
    // Call bool isInternetConnection() 
    jboolean jReturnValue = env->CallBooleanMethod(mClass,mid); 
    CCLog("Call done "); 
    // Convert value from Java to C++ 
    returnValue = (bool)jReturnValue; 
    CCLog("isInternetConnected Done "); 

    if(isAttached) 
     jvm->DetachCurrentThread(); 

    // Change for return value 
    return returnValue; 
} 

Но я не знаю, почему. Если я делаю недействительный вызов с помощью «() V», отлично работает, но когда я пытаюсь вызвать функцию, которая возвращает bool no.

Что происходит?

ответ

3

Это статический метод или нет? Ваши комментарии в коде указывают, что он является статичным, а вызовы метода не выполняются.

Если это NOT статический, то вам нужно будет позвонить CallBooleanMethod с объектом, а не с классом, как вы сейчас. В противном случае вам придется использовать CallStaticBooleanMethod с классом.

jobject someObject = <get or create the object somehow> 
jboolean jReturnValue = env->CallBooleanMethod(someObject,mid); 

ИЛИ

jboolean jReturnValue = env->CallStaticBooleanMethod(mClass,mid); 

В любом случае вы должны будете решить, следует ли использовать статические методы или нет.

+0

Это не статический метод. Я пробовал использовать Static, но у меня была проблема с SIGNAL BUS, как вы знаете, поэтому я изменил свою функцию Java и теперь не статичен. Дело в том, какой объект запрашивается функцией? – vgonisanz

+1

Необходимым объектом является объект для запуска метода. 'someObject.isInternetConnected()' в Java. – maba

Смежные вопросы