[JNI] Tableau de String => Problème
Voila, j'aimerai faire une méthode en JNI qui renvoie une tableau de String ( donc String[] ).
La voici :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
JNIEXPORT jobjectArray JNICALL Java_ProcessHelper_getListProcesses (JNIEnv *env, jobject obj)
{
int i = 0, size;
char outbuf[MAX_PATH];
jobjectArray result;
jclass stringArrayCls ;
size = (int) GetTaskList();
stringArrayCls = (*env)->FindClass(env, "[Ljava/lang/String;");
if(stringArrayCls == NULL) {
printf("Impossible de creer la classe de Tableau de String");
return NULL;
}
result = (*env)->NewObjectArray(env, size, stringArrayCls, NULL);
if(result == NULL)
{
return NULL;
}
// temporaire mais pour être sur d'avoir une chaine valide
strcpy(outbuf, "test");
for(i = 0 ; i < 10; i++) {
jstring temp = (*env)->NewStringUTF(env, outbuf);
(*env)->SetObjectArrayElement(env, result, i, temp);
(*env)->DeleteLocalRef(env, temp);
}
return result;
} |
Cependant, quand je l'utilise j'obtient ceci :
Code:
1 2 3 4 5 6 7 8 9
|
Exception in thread "main" java.lang.ArrayStoreException
at ProcessHelper.getListProcesses(Native Method)
at ProcessHelper.main(ProcessHelper.java:21)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:90) |
Etant mes premiers pas en JNI, je cherche mais je vois pas ou est le probleme.
RQ : si vous avez des remarques sur ma manière de programmer en JNI ( mauvaise gestion de mémoire etc ), je suis preneur.