Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Can';不要从C+打电话+;使用JNI访问Java_C++_Java Native Interface_Cocos2d X - Fatal编程技术网

C++ Can';不要从C+打电话+;使用JNI访问Java

C++ Can';不要从C+打电话+;使用JNI访问Java,c++,java-native-interface,cocos2d-x,C++,Java Native Interface,Cocos2d X,我有一个关于cocos2d-x库的小项目。我尝试用C++调用java函数,但是我在线路上得到了一个信号11异常: // Get Status status = jvm->GetEnv((void **) &env, JNI_VERSION_1_6); 但我不知道为什么会这样 在我的Java类Getsocial.Java中,存在以下函数: private void tweet() { String score = "123"; String

我有一个关于cocos2d-x库的小项目。我尝试用C++调用java函数,但是我在线路上得到了一个信号11异常:

// Get Status
status = jvm->GetEnv((void **) &env, JNI_VERSION_1_6);
但我不知道为什么会这样

在我的Java类Getsocial.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)); } 私有void tweet() { 字符串分数=“123”; 字符串tweetUrl=”https://twitter.com/intent/tweet?text=Hello !在我的Android游戏中,我刚刚获得“+分数+”分!!!!”; Uri=Uri.parse(tweetUrl); startActivity(新意图(Intent.ACTION_视图,uri)); } 此函数用于启动navigator以发布推文。从Java调用可以很好地工作

<我的C++接口F.E.I。我有:

#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__ #ifndef接口JNI H__ #定义接口__ #包括“cocos2d.h” 类接口JNI { 公众: 静态void postMessageOfB(); 静态void postMessageToTweet(); 受保护的: }; #endif/\uu接口\u JNI\u 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; } #包括“InterfaceJNI.h” #包括“platform/android/jni/JniHelper.h” #包括jni.h> #包括android/log.h> 使用名称空间cocos2d; void InterfaceJNI::postMessageToTweet() { 智力状态; JNIEnv*env; JavaVM*jvm; jmethodidemid; jclass-mClass; bool isAttached=false; CCLog(“静态postMessageToTweet”); //获得地位 status=jvm->GetEnv((void**)和env,JNI\u版本1\u 6); CCLog(“状态:%d”,状态); if(状态AttachCurrentThread(&env,NULL); CCLog(“状态2:%d”,状态); 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) InterfaceJNI::postMessageToTweet(); #elif (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) ObjCCalls::trySendATweet(); #endif #如果(CC_目标_平台==CC_平台_ANDROID) InterfaceJNI::postMessageToTweet(); #elif(CC_目标_平台==CC_平台_IOS) ObjCCalls::trySendATweet(); #恩迪夫
在jvm->GetEnv((void**)&env,JNI_VERSION_1_6)上返回空指针会发生什么情况?

看起来您的jvm变量是空的或垃圾。我使用的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项目。您可能已经“刷新”了,但值得检查。

这项工作启动该功能很好,现在再次失败,但谢谢!