我有一个带有 cocos2d-x 库的小项目。我正在尝试使用 C++ 调用 Java 函数,但我在行收到信号 11 异常:
// Get Status
status = jvm->GetEnv((void **) &env, JNI_VERSION_1_6);
但我不知道为什么会这样。
在我的 Java 类 Getsocial.java 中存在这个函数:
私人无效推文()
{
字符串分数 = "123";
String tweetUrl = "https://twitter.com/intent/tweet?text=Hello !我刚刚在 mygame for Android 中获得了 " + score + " 积分!!!!";
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"
类接口JNI
{
上市:
静态无效 postMessageToFB();
静态无效 postMessageToTweet();
受保护:
};
#endif // __INTERFACE_JNI_H__
在 InterfaceJNI.cpp 中:
#include "接口JNI.h"
#include "平台/android/jni/JniHelper.h"
#include jni.h >
#include android/log.h >
使用命名空间 cocos2d;
无效接口JNI::postMessageToTweet()
{
整数状态;
JNIEnv *env;
JavaVM *jvm;
jmethodID 中间;
jclass mClass;
布尔 isAttached = false;
CCLog("静态 postMessageToTweet");
// 获取状态
status = jvm->GetEnv((void **) &env, JNI_VERSION_1_6);
CCLog("状态:%d", status);
if(状态 AttachCurrentThread(&env, NULL);
CCLog("状态 2: %d", status);
if(status GetStaticMethodID(mClass, "tweet", "()V");
CCLog("mID: %d", mid);
如果(中!=0)
env->CallStaticVoidMethod(mClass, mid);
//------------------------------------------------ ------------
CCLog("完成");
如果(已附加)
jvm->DetachCurrentThread();
返回;
}
使用以下代码从部分代码调用此接口:
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
接口JNI::postMessageToTweet();
#elif (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
ObjCCalls::trySendATweet();
#万一
在 jvm->GetEnv((void **) &env, JNI_VERSION_1_6); 上返回空指针会发生什么??