[JNI] problème de création d'un jObjectArray
Bonjour,
je développe en C et Java en utilisant JNI (un programme Java appelle des fonctions C), et je souhaite mettre à la disposition du programme C une méthode Java.
La méthode est définie dans ma classe Java (elle prend 2 strings en entrée et génère un string en sortie):
Code:
1 2 3
| private String formatString(String inputString, String method) {
return "\"" + inputString + "(" + method + ")\"";
} |
Dans mon programme C, je la retrouve comme ça:
Code:
1 2 3 4
| if(!(mid = (*env)->GetMethodID(env, cls, "formatString",
"(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"))) {
// error
} |
La méthode est reconnue et peut être appelée. Si je rajoute, après le GetMethod, quelque chose comme ça:
Code:
jresult = (*env)->CallObjectMethod(env, objet, mid);
j'optiens bien la chaîne générée par la méthode java.
Mon problème, c'est le passage de paramètres à ma méthode java. Je crée un jobjectArray args, et je le remplis comme ça:
Code:
1 2 3 4 5 6 7 8 9
| args= (*env)->NewObjectArray(env,
2,
(*env)->FindClass(env, "java/lang/String"),
NULL);
(*env)->SetObjectArrayElement(env,
args,0,(*env)->NewStringUTF(env, "mon_inputString"));
(*env)->SetObjectArrayElement(env,
args,1,(*env)->NewStringUTF(env, "ma_methode")); |
Lorsque j'appelle ma méthode avec les arguments:
Code:
jresult = (*env)->CallObjectMethod(env, objet, mid, args);
je me retrouve avec une erreur lors de l'exécution:
Code:
1 2 3 4
| Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.lang.AbstractStringBuilder.expandCapacity(Unknown Source)
at java.lang.AbstractStringBuilder.append(Unknown Source)
at java.lang.StringBuffer.append(Unknown Source) |
Ai-je mal créé mon objectArray ?
Merci !