我发现这个代码特定位相当困难的二维String数组(不是其中最重要的,因为我只有一个星期前开始使用C玩)。创建,填充并返回从本机代码(JNI/NDK)
我一直试图很难找到正确的语法正确地创建在C的java字符串数组(即,的jstring对象的数组,即其表示的jstring对象的阵列的对象)。我一直在使用以下资源,并从中构建了编译代码。我不确定之后发生的错误是由于语法错误还是由于完全不同的原因。由于代码大多是孤立的,我假设语法不正确。
(Suns Native Programming Documentation & Suns JNI documentation)
代码编译但传送的代码SIGSEGV信号被发送了“findClass的”线,其杀死C工艺之后:
jint size = 5;
jclass StringObject = (*env)->FindClass(env, "java/lang/String");
jobjectArray sampleMessage = (*env)->NewObjectArray(env, size, StringObject, NULL);
jobjectArray returnArray = (jobjectArray) (*env)->NewObjectArray(env, messageCount, &sampleMessage, 0);
谁能指点一个有用的资源呢?或者确认语法正确。
编辑
我我的问题很大一部分是调试这个代码导致的问题。我没有时间来缩小复制因子,但通过eclipse跨越gdb-client中的JNI代码无效。
很好的答案。非常感谢你! – Graeme 2011-05-23 10:25:05
这段代码的一个变体在我的测试工具中很好用。然而,当插入到我的应用程序中时,'jclass stringClass =(* env) - > FindClass(env,“java/lang/String”);'会抛出一个'SIGSEGV'。从我所有的检查都框架和应用程序设置相同。不仅如此,我甚至已经使c文件具有足够的通用性,可以在线束和代码之间进行复制,并且仍然会中断。 有谁知道什么'JCLASS stringClass =(* ENV) - > FindClass后面(ENV, “爪哇/郎/字符串”);'是依赖? – Graeme 2011-05-23 14:56:30
大概http://stackoverflow.com/questions/5991615/unable-to-get-jnienv-value-in-arbitrary-context – fizzer 2011-05-23 16:47:03