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):
Dans mon programme C, je la retrouve comme ça:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 private String formatString(String inputString, String method) { return "\"" + inputString + "(" + method + ")\""; }
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
1
2
3
4 if(!(mid = (*env)->GetMethodID(env, cls, "formatString", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"))) { // error }
j'optiens bien la chaîne générée par la méthode java.
Code : Sélectionner tout - Visualiser dans une fenêtre à part jresult = (*env)->CallObjectMethod(env, objet, mid);
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:
je me retrouve avec une erreur lors de l'exécution:
Code : Sélectionner tout - Visualiser dans une fenêtre à part jresult = (*env)->CallObjectMethod(env, objet, mid, args);
Ai-je mal créé mon objectArray ?
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)
Merci !
Partager