2014-10-07 42 views
5

我通过JNI从C++调用Java方法。 Java方法返回一个枚举STATUS。我已经表示我的C++代码的枚举喜欢这里的jobjects:https://stackoverflow.com/a/17441151/3352197比较JNI对象引用

jclass clSTATUS = env->FindClass("MyClass$STATUS"); 
jfieldID fidONE = env->GetStaticFieldID(clSTATUS , "ONE", "LMyClass$STATUS;"); 
jobject STATUS_ONE = env->GetStaticObjectField(clSTATUS, fidONE); 

因此,呼叫

jobject o = env->CallObjectMethod(jTestobject, test); 

返回表示枚举STATUS一个jobject,专门之一。那么,我怎么知道它返回的枚举呢? 我试图将其与STATUS_ONE进行比较,但它们不匹配。

+0

你是如何将'o'与'STATUS_ONE'进行比较的? – Samhain 2014-10-07 18:27:14

+0

只是==,但这可能是错误的? 我也打印了两个,但他们有不同的指针(或左右)。 – sosnet 2014-10-07 18:32:39

+0

尝试使用“equals”方法。不确定'env-> IsSameObject(o,STATUS_ONE)'是否调用它 – Samhain 2014-10-07 18:40:47

回答

6

在Samhain指出我可能犯的错误之后,自己找到了它。 你只需要正确比较对象:

env->IsSameObject(o, STATUS_ONE); 

谢谢!