2014-10-07 12 views
5

Tôi gọi một phương thức Java từ C++ qua JNI. Phương thức Java trả về một STATUS enum. Tôi đã có jobjects đại diện cho enums trong c của tôi ++ mã như ở đây: https://stackoverflow.com/a/17441151/3352197So sánh các tham chiếu đối tượng JNI

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

Vì vậy, cuộc gọi

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

trả về một jobject đại diện cho một TÌNH TRẠNG enum, đặc biệt ONE. Vì vậy, làm thế nào để tôi biết enum nó đã trở lại? Tôi đã cố gắng so sánh nó với STATUS_ONE, nhưng chúng không khớp.

+0

bạn so sánh 'o' với' STATUS_ONE' bằng cách nào? – Samhain

+0

chỉ với ==, nhưng điều này có thể là sai? Tôi cũng in cả hai, nhưng chúng có các con trỏ khác nhau (hoặc hơn). – sosnet

+0

thử sử dụng phương thức 'equals'. Bạn không chắc chắn nếu 'env-> IsSameObject (o, STATUS_ONE)' gọi là có hay không – Samhain

Trả lời

6

Tìm thấy nó một mình, sau khi Samhain chỉ ra sai lầm có thể xảy ra của tôi. Bạn chỉ cần so sánh các đối tượng chính xác:

env->IsSameObject(o, STATUS_ONE); 

Cảm ơn bạn!

Các vấn đề liên quan