【发布时间】:2017-11-17 09:13:36
【问题描述】:
我正在使用 JNI 从 C++ 调用 Java 类的实例方法。 我的 Java 方法返回集,我需要在 C++ 中捕获它。有人可以帮忙吗?
我的 Java 方法如下所示。
@Override
public Set<String> getRealmRights()
{
Set<String> realmRights = new HashSet<>();
-----------------
-----------------
return realmRights;
}
我正在从 C++ 调用方法,如下所示。
jmethodID getRealmRightsMethodId = env->GetMethodID(keycloakAdapterApplicationClassId, "getRealmRights", "()Ljava/util/Set;");
if(getRealmRightsMethodId != nullptr)
{
jobject rights = (jobject ) env->CallObjectMethod(keycloakAdapterApplication, getRealmRightsMethodId);
//@ this stage I want to read the information from jobject,Please help?
}
我正在正确获取方法 ID,甚至能够执行该方法。
我尝试在 set 中键入 cast jobject 但失败了。我可以直接在集合中捕获它吗?或者我可以将作业转换为集合吗?
我想打印java函数返回的信息,请帮忙?
【问题讨论】:
-
“抓住这个”是什么意思?
Set不是jarray,而是jobject。如果你想访问集合中的元素,你可以例如在 Java 代码中使用toArray以返回String[]而不是Set<String>。如果由于某种原因您无法更改 Java 代码,您可以在 C++ 中执行相同的操作(GetObjectClass、GetMethodID、CallObjectMethod等)。 -
我收到了jobject中的信息,你能告诉我怎么读吗? jobject 持有 Set
. 类型的值 -
您将使用我提到的函数来获取对
Set类的引用,您要调用的Set中的方法的ID(例如toArray),然后您会调用那个方法。一旦你有了jobjectArray,你就会像往常一样处理它。这都是标准的 JNI 编程(请参阅 docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/…),因此不清楚您到底遇到了什么问题。
标签: java c++ java-native-interface