2012-10-01 4 views
6

저는 cocos2d-x 라이브러리가있는 약간의 프로젝트가 있습니다. 나는 자바 함수를 호출하는 C++를 사용하기 위해 노력하고있어하지만 난 라인에서 신호 11 예외가 :C++에서 Java로 JNI를 사용하여 Java를 호출 할 수 없습니다

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

그러나 이런 일이 왜 모르겠어. 트윗을 게시

 
private void tweet() 
    { 
     String score = "123"; 
     String tweetUrl = "https://twitter.com/intent/tweet?text=Hello ! I have just got " + score + " points in mygame for Android !!!!"; 
     Uri uri = Uri.parse(tweetUrl); 
     startActivity(new Intent(Intent.ACTION_VIEW, uri)); 
    } 

이 기능 출시 네비게이터 : 내 자바 클래스 Getsocial.java에서

이 기능을 존재합니다. 자바에서 호출 괜찮아요. 내 C++ InterfaceJNI.h에서

내가 가진 :

 
#ifndef __INTERFACE_JNI_H__ 
#define __INTERFACE_JNI_H__ 

#include "cocos2d.h" 

class InterfaceJNI 
{ 
public: 
    static void postMessageToFB(); 
    static void postMessageToTweet(); 

protected: 

}; 

#endif // __INTERFACE_JNI_H__ 

그리고 InterfaceJNI.cpp에 :

 
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) 
    InterfaceJNI::postMessageToTweet(); 
#elif (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) 
    ObjCCalls::trySendATweet(); 
#endif 
:

 
#include "InterfaceJNI.h" 
#include "platform/android/jni/JniHelper.h" 
#include jni.h > 
#include android/log.h > 

using namespace cocos2d; 

void InterfaceJNI::postMessageToTweet() 
{ 
    int status; 
    JNIEnv *env; 
    JavaVM *jvm; 
    jmethodID mid; 
    jclass mClass; 
    bool isAttached = false; 

    CCLog("Static postMessageToTweet"); 

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

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

    if(status AttachCurrentThread(&env, NULL); 
     CCLog("Status 2: %d", status); 
     if(status GetStaticMethodID(mClass, "tweet", "()V"); 
    CCLog("mID: %d", mid); 

    if (mid!=0) 
     env->CallStaticVoidMethod(mClass, mid); 
      //----------------------------------------------------------- 
    CCLog("Finish"); 
    if(isAttached) 
     jvm->DetachCurrentThread(); 

    return; 
} 

이 인터페이스를 사용하여 코드의 일부에서 호출

null 포인터를 jvm-> GetEnv ((void **) & env, JNI_VERS에 반환하는 현상이 발생합니다. ION_1_6); ?

답변

2

jvm 변수가 null이거나 가비지 인 것 같습니다. 내가 사용하는 Cocos2D-x의 버전은 JniHelper라는 클래스와 static :: getJavaVM(); 메소드를 사용할 수 있습니다.

JavaVM* vm = JniHelper::getJavaVM(); 
JNIEnv* env; 

vm->GetEnv((void**)&env,JNI_VERSION_1_4); // mine uses JNI_VERSION_1_4 

또한 NDK로 빌드 할 때마다 이클립스 프로젝트를 "새로 고침"하십시오. 아마 이미 해봤 겠지만, 확인해 볼 가치가 있습니다.

+0

이 기능을 실행해도 문제가 없지만 이제는 감사하지만 실패합니다! – vgonisanz

관련 문제