gpt4 book ai didi

java - 对 getClass 的 jni 调用为作业对象返回 null

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:01:49 25 4
gpt4 key购买 nike

我在使用 JNI 从 C++ 代码进行 Java 调用时遇到了问题。我能够获得工作对象,但对工作对象的任何 API 的调用都失败了。经过将近一天的挖掘并与其他可用的 Java API(我在代码中调用的作业对象)进行比较,我发现了一个不同之处。

下面这段代码

void printClassInfo(JNIEnv* env, jobject object, jclass klazz)
{
printf("printclass info 1\n");
printf("printclass info 2\n");

// First get the class object
jmethodID mid = env->GetMethodID(klazz, "getClass", "()Ljava/lang/Class;");
printf("printclass info 2.1\n");
jobject clsObj = env->CallObjectMethod(object, mid);
printf("printclass info 3\n");
if(clsObj == NULL){
printf("cls obj is null");
}
}

打印 cls obj 对于我遇到问题的作业为空。

对于其他jobjects,调用不返回null。

主要区别在于它是一个新添加的类,我似乎遗漏了一些可能导致此问题的东西。我一次又一次地重新检查,但没有得到任何明确的指标。

感谢任何帮助。

最佳答案

您已经有了对象。为什么你需要它的类(抱歉 klass)? JNI 为您提供了一个 nic 函数,GetObjectClass(jobject)。以下是您可以执行的操作:

void printClassInfo(JNIEnv* env, jobject object) {

jclass clsObj = env->GetObjectClass(env, object);
if (clsObj == NULL) {
printf("cls obj is null");
}
}

这会解决您的问题吗?

关于java - 对 getClass 的 jni 调用为作业对象返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22530741/

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