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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
private String formatString(String inputString, String method) {
	return "\"" + inputString + "(" + method + ")\"";
}
Dans mon programme C, je la retrouve comme ça:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
	jresult = (*env)->CallObjectMethod(env, objet, mid, args);
je me retrouve avec une erreur lors de l'exécution:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 !