我有一个带有 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); 上返回空指针会发生什么??