繁体   English   中英

如何从C ++调用非静态Java方法?

[英]How to call non-static java method from c++?

如何从本地(C ++)代码调用Java方法(非静态)? 我在互联网上看到了一些例子,但并不能完全理解(这对我不起作用)。

我尝试这样的代码:

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);

最简单的方法是用Java创建对象,然后使用JNI传递句柄。

如果要用C ++代码创建对象,则只需获取类,找到构造函数<init>函数,然后使用env-> NewObject(...)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM