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!Android用のmygameで"+スコア+"ポイントを獲得しました!!!!";
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"
クラスInterfaceJNI
{{
公衆:
static void postMessageToFB();
static void postMessageToTweet();
保護:
};
#endif // __INTERFACE_JNI_H__
そしてInterfaceJNI.cppで:
#include "InterfaceJNI.h"
#include "platform / android / jni / JniHelper.h"
#include jni.h>
#include android / log.h>
名前空間cocos2dを使用します。
void InterfaceJNI :: postMessageToTweet()
{{
intステータス;
JNIEnv * env;
JavaVM * jvm;
jmethodID mid;
jclass mClass;
bool isAttached = false;
CCLog( "静的postMessageToTweet");
//ステータスを取得
status = jvm-> GetEnv((void **)&env、JNI_VERSION_1_6);
CCLog( "ステータス:%d"、ステータス);
if(status AttachCurrentThread(&env、NULL);
CCLog( "ステータス2:%d"、ステータス);
if(status GetStaticMethodID(mClass、 "tweet"、 "()V");
CCLog( "mID:%d"、mid);
if(mid!= 0)
env-> CallStaticVoidMethod(mClass、mid);
// ------------------------------------------------ -----------
CCLog( "終了");
if(isAttached)
jvm-> DetachCurrentThread();
戻る;
}
このインターフェースは、以下を使用してコードの一部から呼び出されます。
#if(CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
InterfaceJNI :: postMessageToTweet();
#elif(CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
ObjCCalls :: trySendATweet();
#endif
jvm-> GetEnv((void **)&env、JNI_VERSION_1_6);でnullポインタを返すために何が起こっているのか ?