Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JNI:在不预先知道大小的情况下创建jobjectArray_C_Arrays_Java Native Interface - Fatal编程技术网

JNI:在不预先知道大小的情况下创建jobjectArray

JNI:在不预先知道大小的情况下创建jobjectArray,c,arrays,java-native-interface,C,Arrays,Java Native Interface,我想使用JNI将字符串数组从C返回到Java。 我发现我可以这样使用NewObjectArray(): JNIEXPORT jobjectArray JNICALL Java_Array_initStringArray(JNIEnv *env, jclass cls, jint size) { jclass stringCls = (*env)->FindClass(env, "Ljava/lang/String;"); if (stringCls == NULL) return NU

我想使用JNI将字符串数组从C返回到Java。 我发现我可以这样使用
NewObjectArray()

JNIEXPORT jobjectArray JNICALL Java_Array_initStringArray(JNIEnv *env, jclass cls, jint size)
{
 jclass stringCls = (*env)->FindClass(env, "Ljava/lang/String;");
 if (stringCls == NULL) return NULL;

 jstringArray result = (*env)->NewObjectArray(env, size, StringCls, NULL);
 if (result == NULL) return NULL; 
 ...
}
但在这里,我不知道
int size
参数:我不知道将用于填充数组的字符串数。那么,有没有一种方法可以在不事先知道数组大小的情况下创建jobjectArray

类似于创建一个空数组,然后将jobject逐个添加到该数组中


编辑:使用Edwin建议的ArrayList解决方案

jclass arrayClass = (*jenv)->FindClass(jenv, "java/util/ArrayList");
  if (arrayClass == NULL)   return NULL;

jmethodID mid_init =  (*jenv)->GetMethodID(jenv, arrayClass, "<init>", "()V");
  if (mid_init == NULL) return NULL;

jobject objArr = (*jenv)->NewObject(jenv, arrayClass, mid_init));
  if (objArr == NULL) return NULL;

mid_add = (*jenv)->GetMethodID(jenv, arrayClass, "add", "(Ljava/lang/Object;)Z");
  if (mid_add == NULL) return NULL;

如果您想让备份存储(数组)随着添加而增长,请使用
java.util.ArrayList
。这可能意味着需要更多的JNI调用(来设置对象),但在您的情况下,这听起来是值得的。

对。我星期一去看看。
jboolean jbool = (*jenv)->CallBooleanMethod(jenv, objArr, mid_add, obj);
  if (jbool == NULL) return NULL;