Tôi có một dự án nhỏ với thư viện cocos2d-x. Tôi đang cố gắng sử dụng C++ để gọi một chức năng Java nhưng tôi nhận được một tín hiệu 11 ngoại lệ tại dòng:Không thể thực hiện cuộc gọi từ C++ sang Java bằng JNI
// Get Status
status = jvm->GetEnv((void **) &env, JNI_VERSION_1_6);
Nhưng tôi không biết tại sao điều này đang xảy ra.
Trong lớp Java của tôi Getsocial.java tồn tại chức năng này:
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)); }
Chức năng này ra mắt navigator để gửi một tweet. Được gọi từ Java hoạt động tốt.
Trong C++ của tôi InterfaceJNI.h tôi có:
#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__
Và trong 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; }
Giao diện này được gọi từ một phần của mã sử dụng:
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) InterfaceJNI::postMessageToTweet(); #elif (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) ObjCCalls::trySendATweet(); #endif
Điều gì đang xảy ra để trả về con trỏ rỗng trên jvm-> GetEnv ((void **) & env, JNI_VERS ION_1_6); ?
Điều này làm việc tốt để khởi động chức năng, bây giờ thất bại khác với nhưng cảm ơn! – vgonisanz