IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

[JNI] création d'un tableau de Strings


Sujet :

Entrée/Sortie Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2008
    Messages : 20
    Points : 15
    Points
    15
    Par défaut [JNI] création d'un tableau de Strings
    Bonjour à tous,
    tout est dans le titre : "JNI et les tableaux de Strings"

    Pour situer mon p'tit problème:
    je veux "tout simplement" passer un tbl de string à une méthode native qui doit m'en retourner une à son tour. je suis clair ?

    bon, j'ai fais la moitié du boulot, le passage en argument fonctionne ! (c'est les "printf"...)

    Par contre je bloques complètement pour renvoyer le nouveau tableau...

    voici le code de ma méthode native (en C) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    #include <jni.h>
    #include "Main.h"
    #include <stdlib.h>
     
    JNIEXPORT jobjectArray JNICALL Java_Main_native_1methode(JNIEnv * env, jobject obj, jobjectArray l){
     
     
    	int size = (*env)->GetArrayLength(env,l);
    	int i;
    	char* chaine;
    	jobject obj_temp;
     
    	for(i=0;i<size;i++){
    	obj_temp = (*env)->GetObjectArrayElement(env,l,i);
    	chaine = (jstring) (*env)->GetStringUTFChars(env,obj_temp,0);
    	printf("%s\n",chaine);
    	}
     
    	//(*env)->ReleaseStringUTFChars(env,chaine,obj_temp);
     
    	char* c1 = "toto";
    	char* c2 = "titi";
    	//jobject jo;
    	//jstring c1 = (*env)->NewStringUTF(env,"titi");
    	//jstring c2 = (*env)->NewStringUTF(env,"toto");
     
    	jobjectArray res;// = (jobjectArray)(*env)->NewObjectArray(env,2,jo,NULL);
    	(*env)->SetObjectArrayElement(env,res,0,(jobject)c1);
    	(*env)->SetObjectArrayElement(env,res,1,(jobject)c2);
     
    	return res;
     
    	}
    Avec le code "dans cet état", çà compile sans problème, mais quand je lance mon appli java :



    Les lignes de codes en commentaires sont des essais fais "à taton" pour tenter de faire avancer le schmilblick...

    Bon ben voila, j'espère que j'ai été assez clair, et surtout qu'un pro du JNI passe par là...

    Merci d'avance !
    Images attachées Images attachées  

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 351
    Points : 432
    Points
    432
    Par défaut
    tu retournes res mais res n'a jamais été initialisé c'est ce qui fait planter je suppose. Si tu as mis la ligne en commentaire c'est ce que ça ne compile pas, quel étais le message d'erreur ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2008
    Messages : 20
    Points : 15
    Points
    15
    Par défaut
    Salut,

    désolé de ne pas avoir répondu plus vite, mais ce week-end je n'étais pas chez moi...

    Mon problème reste entier, avec cette version du code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    char* c1 = "toto";
    	char* c2 = "titi";
    	jobject jo;
    	//jstring c1 = (*env)->NewStringUTF(env,"titi");
    	//jstring c2 = (*env)->NewStringUTF(env,"toto");
     
    	jobjectArray res = (jobjectArray)(*env)->NewObjectArray(env,2,jo,NULL);
    	(*env)->SetObjectArrayElement(env,res,0,(jobject)c1);
    	(*env)->SetObjectArrayElement(env,res,1,(jobject)c2);
     
     
     
    	return res;

    j'ai les mêmes symptomes, çà compile mais çà plante de la même façon avec toujours ce message qui fait peur :"EXCEPTION_ACCESS_VIOLATION..."

    Peut être que bien reposé, un lundi matin, je vais réussir à me débloquer ?

    Sinon un coup de pouce est toujours le bien venu !

    Merci d'avance.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2008
    Messages : 20
    Points : 15
    Points
    15
    Par défaut
    Bon, alors personne ne voit comment me débloquer ?

    ce que je doit renvoyer doit être de la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return ["toto", "titi", ...]

  5. #5
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    Il te faut indiquer la classe des éléments du tableau lors de l'appel à la fonction NewObjectArray.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // On récupère l'objet classe String
    jclass stringClass = (*env)->FindClass(env, "java/lang/String");
     
    // On construit un tableau de String
    jobjectArray res = (jobjectArray)(*env)->NewObjectArray(env, 2, stringClass, NULL);
    De plus, le tableau attend des Strings, il te faut donc passer par des jstring :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    jstring c1 = (*env)->NewStringUTF(env, "titi");
    jstring c2 = (*env)->NewStringUTF(env, "toto");
    (*env)->SetObjectArrayElement(env, res, 0, (jobject) c1);
    (*env)->SetObjectArrayElement(env, res, 1, (jobject) c2);
    return res;
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2008
    Messages : 20
    Points : 15
    Points
    15
    Par défaut
    MERCI BEAUCOUP !!!

    j'ai cru devenir fou avec ce truc...

    Par contre, j'ai déjà trouvé un nouveau problème qui fera l'objet d'un autre post...

    Encore merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Création d'un tableau en shell à partir d'un string
    Par jimmy4413 dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 31/05/2011, 14h00
  2. Création JTree à partir d'un tableau de String[][]
    Par benZ31 dans le forum Composants
    Réponses: 0
    Dernier message: 17/04/2009, 09h41
  3. Création d'un tableau de Vecteur de String
    Par Claythest dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 29/11/2006, 17h43
  4. [JNI] Retourner un tableau de String via JNI
    Par seiryujay dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 25/07/2006, 09h58
  5. [JNI] Tableau de String => Problème
    Par Hikage dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 03/07/2006, 17h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo