2010-03-29 51 views

回答

2

我知道这个问题是旧的,但...

要找到一类的你阵列,使用:

env->FindClass("[[Lmy/package/MyClass;") 
+0

其实这也是不正确的,它最后还需要';'(如Rob的评论)。 – 2013-05-14 13:16:42

+0

@DanBerindei:是的,错过了,纠正了 – 2013-05-14 16:50:03

1

上JNI有点生疏,但有几样事情:你的全类名

呼叫FindClass(),使用“/”作为分隔符,而不是点。所以,举例来说,如果你的类是"my.package.MyClass",你会打电话env->FindClass("my/package/MyClass")

既然你有你的对象类型的二维数组,你需要调用env->GetObjectArrayElement()两次;一次得到一排,另一次得到一个独特的元素。那么你可以在该元素上调用env->IsInstanceOf()。确保你查找正确的签名,这些JNI调用,我已经离开了他们作为一个练习留给读者:)

+0

的问题是,我不知道如果我的目标是即使一个数组,和JNI规范甚至不说,如果我尝试调用GetObjectArrayElement的对象上会发生什么这不是一个数组。我当然不能依靠C++来告诉我,我不能将jobject转换为jobjectArray。 – 2010-03-30 07:33:09

+0

您可以调用GetObjectClass()来获取对象的类。在你上面的例子中,它会返回“[LMyClass;” 如果该类包含在一个包中,该名称将完全限定为“/”而不是点(即“[Lmy/package/MyClass;”) – 2010-03-30 08:11:28

+1

确实,但我不想获得该类,然后获取名称,然后比较每次调用中的字符串。我想我的情况最好的解决方案是在第一个JNI调用中创建一个数组并缓存它的类,以便我可以对其执行IsInstanceOf。 – 2010-03-31 08:10:11

相关问题