Как вызвать нестатический метод Java из C ++?

0

Как я могу вызвать java-метод (нестатический) из собственного (C++) кода? Я видел несколько примеров в Интернете, которые не поняли точно (это не работает для меня).

Я пробую что-то вроде этого кода:

Код java:

public void displayInterstitial() {

            if(adView!=null)
            {

        if (adView.getVisibility() == AdView.VISIBLE) {
                adView.post(new Runnable() {
                    public void run() {
                        adView.setVisibility(AdView.INVISIBLE);
                    }
                });
            }
        }

    }

C++ код:

// JNI OnLoad
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved)
{
    g_JavaVM = vm;
    return JNI_VERSION_1_6;
}

JNIEnv* MenuState::getJniEnv() {
    JavaVMAttachArgs attachArgs;
    attachArgs.version = JNI_VERSION_1_6;
    //attachArgs.name = ">>>NativeThread__Any";
//  attachArgs.group = NULL;

    JNIEnv* env;
    if (g_JavaVM->AttachCurrentThread(&env, &attachArgs) != JNI_OK) {
        env = NULL;
    }

    return env;
}


void MenuState::displayInterstitial()
{

   JNIEnv *env = getJniEnv();

    jclass cls = env->FindClass("org/libsdl/app/SDLActivity");

  jmethodID dispin = env->GetMethodID(cls, "displayInterstitial", "()V");

     env->CallVoidMethod(obj, dispin);
}

Извините, может быть, дублированный вопрос. Как я могу получить jobject (obj) для этой строки env-> CallVoidMethod (obj, dispin); ?

Теги:

1 ответ

1
Лучший ответ

Самый простой способ - создать объект в Java, а затем передать дескриптор JNI.

Если вы хотите создать объект в коде C++, просто получите класс, как вы, найдите конструктор <init> и используйте env-> NewObject (...)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню