gpt4 book ai didi

android - 使用 JNI 时实例和类变量状态的问题

转载 作者:行者123 更新时间:2023-11-30 04:10:52 25 4
gpt4 key购买 nike

我目前正在编写一些使用 JNI 的 Android 代码,但我很难理解类和实例变量的工作方式。如果我执行下面的代码,我希望代码打印一个值“18”,但我总是收到一个值“0”。有人可以解释我做错了什么吗?

//Java代码

SampleClass sc = new SampleClass(18);
sc.printId() // returns 18, as expected
sc.nativePrintId() // returns 0, why?!

//Java 类

public class SampleClass
{
private int mId = -1;

public FFmpegMediaPlayer(int id) {
mId = id;
}

public void printId() {
System.out.println("id: " + mId);
}

public native void nativePrintId();
}

//JNI C++代码

static void nativePrintId(JNIEnv* env, jobject thiz)
{
jclass clazz = env->FindClass("wseemann/media/SampleClass");

jmethodID printId = env->GetMethodID(clazz, "printId", "()V");

env->CallVoidMethod(clazz, printId); // always prints zero?
}

最佳答案

您必须将对象而不是类传递给 CallVoidMethod

使用:

env->CallVoidMethod(thiz, printId);

此外,您应该从对象中获取类,而不是从 FindClass 中获取类。

使用:

jclass clazz = env->GetObjectClass(thiz);

关于android - 使用 JNI 时实例和类变量状态的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20436695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com