2013-10-16 2 views
0

Java 코드로 이벤트를 보내는 다음 JNI 함수가 있습니다.JNI 함수로 인해 Android 앱이 충돌 함

void onIncrementAchievement(unsigned char _iArgumentCount, const void *_pArguments, void *_pUserData){ 
JNIEnv *pJNIEnv = GetJNIEnv(); 
if (pJNIEnv){ 

     if (_pArguments && (_iArgumentCount > 0)){ 
       const S3DX::AIVariable *pVariables = (const S3DX::AIVariable *)_pArguments ; 

       if(_iArgumentCount != 2) 
         LOGI("INCORRECT NUMBER OF PARAMETERS"); 
       else{ 
         if(pVariables[0].GetType() == S3DX::AIVariable::eTypeString){ 
           // CHANGE ME! 
           jclass pJNIActivityClass = pJNIEnv->FindClass ("com/nurfacegames/testgame01/TestGame01"); 

           if(pJNIActivityClass == NULL) 
             LOGI("jclass was null!?!"); 
           else{ 
             jmethodID pJNIMethodID = pJNIEnv->GetStaticMethodID(pJNIActivityClass, "onIncrementAchievement", "(Ljava/lang/String;Ljava/lang/Integer;)V"); 

             if(pJNIMethodID == NULL) 
               LOGI("jmethodID was null!?!?"); 
             else{ 
               //Create a new string 
               jstring arg; 
               arg = pJNIEnv->NewStringUTF(pVariables[0].GetStringValue()); 

               jint arg2 = pVariables[1].GetNumberValue(); 

               //Call the method and pass the string parameter along 
               pJNIEnv->CallStaticVoidMethod(pJNIActivityClass, pJNIMethodID, arg, arg2); 
               //Free the string 
               pJNIEnv->DeleteLocalRef(arg); 
             } 
           } 
         } 
       } 
     } 
} 
} 

내 안드로이드 응용 프로그램을 실행, 그것은 힘조차 로그 캣에서 하나의 오류를 포기하지 않고 종료되지 않습니다, 나는 개미로 컴파일 할 때 오류가 컴파일 아니된다.

그런 막연한 질문은 게시하기가 싫지만 누군가 내 JNI 코드에 어떤 문제가 있는지 아이디어가 있으면 힌트를주세요. 감사! 나는 (내가 작업 한 것을) 문제가 있다고 생각

영역은 다음과 같습니다

if(_iArgumentCount != 2) 
         LOGI("INCORRECT NUMBER OF PARAMETERS"); 
       else{ 

이 섹션 :

jint arg2 = pVariables[1].GetNumberValue(); 

pJNIEnv->CallStaticVoidMethod(pJNIActivityClass, pJNIMethodID, arg, arg2); 

감사합니다!

답변

1

글쎄, 내가 아는 한, 그 기본 섹션에서 방법을 선언 할 수있는 권리 방법이 아니다, 당신의 방법 이름 void onIncrementAchievement 보면, 그것이 있어야 :

Java_com_example_yourpackagename_youractivityname_yourmethod(...) 

그리고 한 가지 더, 당신의 방법에있는 논쟁은 틀린 것 같아요. this tutorial을 확인하십시오.

관련 문제