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] Unexpected error, à l'intérieur de libjvm


Sujet :

Entrée/Sortie Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut [JNI] Unexpected error, à l'intérieur de libjvm
    Bonjour,

    Un morceau de code relativement simple provoque une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    JNIEXPORT void JNICALL Java_Test_testFunction
      (JNIEnv *env, jobject obj)
    {
    	jclass cls = env->GetObjectClass(obj);
    	jfieldID fid = env->GetFieldID(cls, "interfaceData", "I");
    	env->SetIntField(cls, fid, (jint)3);
     
    	jclass cls2 = env->GetObjectClass(obj);
    	jfieldID fid2 = env->GetFieldID(cls2, "interfaceData", "I");
    	jint i = env->GetIntField(cls, fid);
    }
    Il écrit quelque chose dans un champ et tente de le lire. La lecture provoque une erreur, apparement sur l'appel de GetFieldID d'après le log produit par la JVM.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    V  [libjvm.so+0x2d06c6]
    C  [libTest.so+0x1c06]  ZN10_Jv_JNIEnv10GetFieldIDEP8__jclassPKcS3_+0x2e
    Il y a peut être quelque chose d'évident, mais je ne vois pas quoi.

    Si le fait que les appels soient doubles (cls-cls2, fid-fid2, etc.) vous gênent, ils sont en fait à des endroits différents dans le vrai code, mais les mettre l'un après l'autre provoque une erreur identique, que je ne comprends toujours pas.

    Une idée ?


    Blustuff.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Effectivement c'était tout bête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    JNIEXPORT void JNICALL Java_Test_testFunction
      (JNIEnv *env, jobject obj)
    {
    	jclass cls = env->GetObjectClass(obj);
    	jfieldID fid = env->GetFieldID(cls, "interfaceData", "I");
    	env->SetIntField(obj, fid, (jint)3);
     
    	jclass cls2 = env->GetObjectClass(obj);
    	jfieldID fid2 = env->GetFieldID(cls2, "interfaceData", "I");
    	jint i = env->GetIntField(obj, fid);
    }
    Il faut donner un objet et non une classe comme paramètre à GetIntField/SetIntField. Ca marche mieux.

    J'ai une autre question. Si je veux associer des données natives à un objet java, comment faire ? Je n'ai pas envie que ces données soient typées java, ni qu'elles soient visibles dans le .java. Existe t-il une solution pour ça ?

Discussions similaires

  1. Réponses: 0
    Dernier message: 17/05/2010, 18h48
  2. Unexpected Error by HotSpot Virtual Machine
    Par elemak dans le forum JSF
    Réponses: 0
    Dernier message: 30/06/2009, 15h40
  3. An unexpected error occurred on a send.
    Par zitoun dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 18/09/2007, 16h26
  4. [DEBUTANT] Crash JVM : Unexpected error
    Par foimpou dans le forum Langage
    Réponses: 5
    Dernier message: 03/04/2007, 12h40
  5. Unexpected error (2121) sous Access 97 ???
    Par showa dans le forum Access
    Réponses: 7
    Dernier message: 05/12/2005, 23h33

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