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

标签 java android c++

如何从 native (C++)代码调用 java 方法(非静态)?我在 Internet 上看到了一些示例,但并不完全理解(它不适合我)。

我正在尝试类似这样的代码:

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++代码中创建对象,直接获取类,找到构造函数,使用env->NewObject(...)

关于java - 如何从 C++ 调用非静态 java 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24829322/

相关文章:

java - IP 地址问题 java 在 Web 浏览器中部署(使用 dtjava.js 部署)

android - 此 java 代码是否会导致垃圾收集问题,如果是,我该如何预防?

java - 不使用 CookieManager 的 Android session cookie

c# - 从 C# 应用程序中使用命令行程序

c++ - libv4l2 错误 : No space left on device

c++ - C++ 的 Python 风格 pickle ?

javascript - JavaFX 容器内的 Java、JavaFx : Inserting a HTML&JS(static, 无互联网)项目

java - Virtualbox 在 Linux 上重置 vboxnet0 的 IP 地址

java - 简单的二分查找程序...请告诉我这段特定代码有什么问题

android - 在 android 中播放 mp3 文件时遇到问题