2012-10-01 5 views
6

私はcocos2d-xライブラリを使用した小さなプロジェクトを持っています。私は、Java関数を呼び出すためにC++を使用しようとしているが、私はラインでの信号11の例外を取得:C++から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)); 
    } 

この機能の起動ナビゲーター:私のJavaクラスGetsocial.javaで

は、この機能を存在します。 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; 
} 

このインタフェースは、使用してコードの一部から呼び出されます

jvm-> GetEnv(null void **)env、JNI_VERSにヌルポインタを返すと何が起こっていますか? ION_1_6); ?

答えて

2

あなたのjvm変数がnullまたはゴミであるようです。私が使用するCocos2D-xのバージョンには、static :: getJavaVM()を持つJniHelperというクラスがあります。メソッドを使用することができます。

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

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

また、NDKでビルドするたびにeclipseプロジェクトを「リフレッシュ」することを忘れないでください。おそらくすでに行っているかもしれませんが、チェックする価値はあります。

+0

この機能は正常に機能するようになりました。 – vgonisanz

関連する問題