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 :

Compiler Le fichier JAVA (Possedant une methode NATIVE) JNI


Sujet :

Entrée/Sortie Java

  1. #1
    Candidat au Club
    Inscrit en
    Février 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Compiler Le fichier JAVA (Possedant une methode NATIVE) JNI
    Bonjour a tous,
    J'ai mon fichier JAVA possedant une methode native en C/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
    package fieldAccess;
    public class FieldAccess {
      static int si;
      String s;
     
      private native void accessFields();
      public static void main(String args[]) {
        FieldAccess c = new FieldAccess();
        FieldAccess.si = 100;
        c.s = "abc";
        c.accessFields();
        System.out.println("In Java:");
        System.out.println("  FieldAccess.si = " + FieldAccess.si);
        System.out.println("  c.s = \"" + c.s + "\"");
      }
       static {
        System.loadLibrary("FieldAccesslib");
      }
    }
    j'ai deja creer les .class, les .h .lib etc...

    Mon fichier native est:

    Code C++ : 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
    34
    35
    #include <stdio.h>
    #include <jni.h>
    #include "FieldAccess.h"
     
    JNIEXPORT void JNICALL 
    Java_FieldAccess_accessFields(JNIEnv *env, jobject obj)
    {
      jclass cls = (*env)->GetObjectClass(env, obj);
      jfieldID fid;
      jstring jstr;
      const char *str;
      jint si;
     
      printf("In C:\n");
     
      fid = (*env)->GetStaticFieldID(env, cls, "si", "I");
      if (fid == 0) {
        return;
      }
      si = (*env)->GetStaticIntField(env, cls, fid);
      printf("  FieldAccess.si = %d\n", si);
      (*env)->SetStaticIntField(env, cls, fid, 200);
     
      fid = (*env)->GetFieldID(env, cls, "s", "Ljava/lang/String;");
      if (fid == 0) {
        return;
      }
      jstr = (*env)->GetObjectField(env, obj, fid);
      str = (*env)->GetStringUTFChars(env, jstr, 0);
      printf("  c.s = \"%s\"\n", str);
      (*env)->ReleaseStringUTFChars(env, jstr, str);
     
      jstr = (*env)->NewStringUTF(env, "123");
      (*env)->SetObjectField(env, obj, fid, jstr);
    }

    J'ai pu creer mon .dll avec avec la comamnde shell.
    A la fin en faisant la commande shell java FieldAccess
    Ca marche tres bien.

    Mais j'aimerai compiler avec ECLISPE, mais ca ne marche pas:
    Le message d'erreur est:

    Exception in thread "main" java.lang.UnsatisfiedLinkError: accessFields
    at fieldAccess.FieldAccess.accessFields(Native Method)
    at fieldAccess.FieldAccess.main(FieldAccess.java:11)
    Pourriez vous m'aider SVP pour que je puisse faire compiler avec Eclipse.

    Je suis un debutant pour l'utilisation d'Eclipse mais dans ma compagnie prefere d'Utiliser Eclipse

    Merci.

    Serge

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Points : 635
    Points
    635
    Par défaut
    Ce n'est pas un problème de compilation mais d'exécution. Tu dois spécifier l'emplacement de ta dll. Tu peux aller dans "Run" -> "Run ...", cherche la config qui correspond à ta classe et dans "Arguments" -> "VM arguments", mets le path avec l'option :
    -Djava.library.path=c:/chemindeladll

Discussions similaires

  1. comment compiler un fichier .java avec cygwin
    Par tihami dans le forum Windows
    Réponses: 2
    Dernier message: 18/04/2007, 10h42
  2. compiler un fichier .java
    Par Mehdi_82 dans le forum Langage
    Réponses: 5
    Dernier message: 08/08/2006, 10h20
  3. pb java avec les methodes natives
    Par sly0510 dans le forum Langage
    Réponses: 2
    Dernier message: 20/07/2006, 06h52
  4. [débutant]ou mettre un fichier java pour une appli jsp?
    Par zozolh2 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 11/05/2004, 15h20

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