首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将jint插入到jobjectArray中?

如何将jint插入到jobjectArray中?
EN

Stack Overflow用户
提问于 2015-07-10 11:37:58
回答 1查看 1.4K关注 0票数 0

如何通过jni正确地构造和传递多个不同对象的数组?我似乎很难把jint转换成jobject。我最初的职能是:

代码语言:javascript
复制
extern "C"  JNIEXPORT jint ... Func(...)
{
    int res = CallNativeFunc();
    return res;
}

现在,我正在修改函数,以便它将返回一个对象数组。第一个对象是原始的res,第二个对象是jbyteArray。

我试过:

代码语言:javascript
复制
extern "C"  JNIEXPORT jobjectArray ... Func(...)
{
   std::vector<unsigned char> outData;
   int res = CallNativeFunc(&outData);

   //construct the returning object array of size 2
   jclass objectClass = env->FindClass("java/lang/Object");
   jobjectArray results = env->NewObjectArray(2, objectClass, 0);

   //construct the 2nd object (a jbyteArray)
   jbyteArray SecondObject = env->NewByteArray(outData.size());
   //transfer data into the 2nd object
   env->SetByteArrayRegion(SecondObject , 0, outData.size(), reinterpret_cast<const signed char*>(outData.data()));

   //transfer the 1st and 2nd objects into the return array
   env->SetObjectArrayElement(results, 0, static_cast<jint>(res));
   env->SetObjectArrayElement(results, 1, SecondObject);

   return results;
}

编译器在下面的行中失败,表示它不能将jint转换为jobject:

代码语言:javascript
复制
env->SetObjectArrayElement(results, 0, static_cast<jint>(res));

我做错了什么?这是做我想做的事的正确方法吗?(将排序的数组“结构”传回java)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-10 12:16:19

Java中的int是一种基本类型,而不是Object。因此,如果要将int存储在Object[]中,则需要将其包装在Integer中。

代码看起来如下(未经测试):

代码语言:javascript
复制
jclass integerClass = env->FindClass("java/lang/Integer");
jmethodID integerConstructor = env->GetMethodID(integerClass, "<init>", "(I)V");
jobject wrappedInt = env->NewObject(integerClass, integerConstructor, static_cast<jint>(res));
env->SetObjectArrayElement(results, 0, wrappedInt);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31339818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档