我有一个与cocos2d-x库的一个小项目。我正在尝试使用C ++来调用Java功能,但我在行中获得一个信号11例外:

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

但我不知道为什么会发生这种情况。

在我的java class gessocial.java存在这个函数:

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调用工作正常。

在我的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:

#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;
}
.

此接口由代码的一部分使用:

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

在JVM-> GetEnv上返回null指针((void **)和env,jni_version_1_6)上发生了什么;?

有帮助吗?

解决方案

看起来您的JVM变量为null或垃圾。Cocos2d-x的版本我使用的是一个名为jnihelper的类,静态:: getJavavm();您可能想要使用的方法。

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

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

还,每次使用NDK构建时,请记住“刷新”Eclipse项目。你可能已经做了,但值得检查。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top