Java 在JNI层中填充字符串数组
我是Java编程新手,有一个基本问题。我想向JNI层传递一个字符串数组。在JNI函数中,数组可以用字符串填充吗?所有的帖子要么讨论如何从JNI层返回字符串数组,要么讨论如何在JNI层解析字符串数组。可能吗Java 在JNI层中填充字符串数组,java,java-native-interface,Java,Java Native Interface,我是Java编程新手,有一个基本问题。我想向JNI层传递一个字符串数组。在JNI函数中,数组可以用字符串填充吗?所有的帖子要么讨论如何从JNI层返回字符串数组,要么讨论如何在JNI层解析字符串数组。可能吗 谢谢是的,这是可能的。有一种方法可以完全满足您的需求。您需要从JNI端创建数组和字符串(类似于在java中调用新字符串(char[]))。Unicode和UTF-8都受支持(每个都有一个JNI函数集) #包括 #包括“ArrayHandler.h” JNIEXPORT jobjectArray
谢谢是的,这是可能的。有一种方法可以完全满足您的需求。您需要从JNI端创建数组和字符串(类似于在java中调用
新字符串(char[])
)。Unicode和UTF-8都受支持(每个都有一个JNI函数集)
#包括
#包括“ArrayHandler.h”
JNIEXPORT jobjectArray JNICALL Java_ArrayHandler_returnArray
(JNIEnv*env,jobject-jobj)
{
jobject数组ret;
int i;
字符*消息[5]={“第一”,
“第二”,
“第三”,
“第四”,
“第五”};
ret=(jobjectArray)env->NewObjectArray(5,
env->FindClass(“java/lang/String”),
env->NewStringUTF(“”);
对于(i=0;iSetObjectArrayElement)(
ret,i,env->NewStringUTF(消息[i]);
}
返回(ret);
}
您可以参考任何现有的jni启动程序代码。您看过了吗?我想添加一条关于在jni中为Java构建complexer数据结构的一般警告。如果您在jni代码中没有正确地手工完成预期的操作,这可能会使您陷入困境。举个例子:链接列表有一些严重的缺陷:调用NewObjectArray
后,应该检查是否发生了ExceptionOccured
。创建新字符串对象也是如此。当然,有时没有办法做到这一点,但在这种情况下,请记住,您正在雷区中移动。感谢您的回复。如果displayarray已被激活,则此代码有效吗位于java层的内存。该示例仅讨论从JNI返回新构造的字符串数组。JNIEXPORT jboolean JNICALL java_***(JNIEnv*env,jobject obj,jobjectArray displayArray){int stringCount=(env)->GetArrayLength(displayArray);for(int i=0;iNewObjectArray
部分,将对数组的引用传递给函数。或者我误解了您的问题?@junix字符串数组已经预先分配,但数据没有填充。我希望较低的层适当地填充数组。这就是目的。如果字符串是不可变的,则语句string=tempString是否正确??
#include <jni.h>
#include "ArrayHandler.h"
JNIEXPORT jobjectArray JNICALL Java_ArrayHandler_returnArray
(JNIEnv *env, jobject jobj)
{
jobjectArray ret;
int i;
char *message[5]= {"first",
"second",
"third",
"fourth",
"fifth"};
ret= (jobjectArray)env->NewObjectArray(5,
env->FindClass("java/lang/String"),
env->NewStringUTF(""));
for(i=0;i<5;i++) {
env->SetObjectArrayElement(
ret,i,env->NewStringUTF(message[i]));
}
return(ret);
}