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 :

[Natif] quel outil j'utilise pour faire mon wrapper java, jni ou jna?


Sujet :

Entrée/Sortie Java

  1. #1
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 130
    Points : 47
    Points
    47
    Par défaut [Natif] quel outil j'utilise pour faire mon wrapper java, jni ou jna?
    bonjour tous le monde,
    J'ai une application en langage "C", pour laquelle, je dois faire un wrapper java.
    On ma demandé de faire avec l'outil 'JNI'.
    Mais quand j'ai commencé à voir ce dernier, j'ai trouvé dans un lien que 'JNA' est plus simple à utilisé.
    J'ai aucune idéé sur JNA. Et t-il meilleur que jni?

    Merci

  2. #2
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Je n'ai jamais utilisé ni l'un ni l'autre, mais il me semble que jna est une évolution de jni développée pour palier aux problèmes de jni.

    si tu peux, utilises jna

    ps: http://mbaron.developpez.com/javase/jnijna/
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  3. #3
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 130
    Points : 47
    Points
    47
    Par défaut
    Merci pour la réponse.
    Svp vous avez un lien pour faire un premier exemple avec 'JNA'

  4. #4
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  5. #5
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 130
    Points : 47
    Points
    47
    Par défaut
    Cet exemple marche sous windows.
    Moi je travail sous ubuntu linux.

    Merci pour votre aide

  6. #6
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    ça doit pas être tellement différent...
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  7. #7
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 130
    Points : 47
    Points
    47
    Par défaut
    Merci pour la réponse.

    J'utilise ce lien: http://blog.developpez.com/adiguba?t..._pour_les_nuls
    Pour faire un premier exemple de 'JNA'
    Mais j'ai des problèmes de compilation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Exemple.java:18: cannot find symbol
    symbol  : class JNADemo
    Svp quelqu'un peut m'aider?

  8. #8
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Envoi le code + la ligne de commande utilisée pour compiler
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  9. #9
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 130
    Points : 47
    Points
    47
    Par défaut
    Bonjour,
    Merci beaucoup Pill_S d'avoir pensé à m'aider.

    J'ai essayé de suivre le lien, mais ils ne montrent pas exactement tous les étapes à faire.

    Voici le code de l'interface:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    import com.sun.jna.Library; 
     
    public interface JNADemo extends Library { 
      public int strcmp(String s1, String s2); 
    }
    Je le compile avec la commande suivante: javac -cp jna.jar JNADemo.java
    il me j'énère le JNADemo.class.
    puis je fait la commande: jar cfv JNADemo.jar JNADemo.class
    Juste pour générer le JNADemo.jar
    Je créé ensuite mon code:
    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
     
    public class Exemple { 
     
      public static void main(String[] args) { 
     
        if (args.length != 2) { 
          System.err.println("Paramètre absent !"); 
          System.exit(1); 
        } 
        String libName = "c"; 
        if (System.getProperty("os.name").contains("Windows")) { 
          libName = "msvcrt";  
        } 
        JNADemo demo = (JNADemo) Native.loadLibrary(libName, JNADemo.class); 
        System.out.printf("strcmp('%s', '%s') => %d %n", 
          args[0], args[1], demo.strcmp(args[0], args[1]) ); 
      } 
     
    }
    Je le compile: javac -cp jna.jar:JNADemo.jar Exemple.java

    Ile me génère l'erreur suivante:
    [CODE]
    Exemple.java:18: cannot find symbol
    symbol : variable Native
    location: class Exemple
    JNADemo demo = (JNADemo) Native.loadLibrary(libName, JNADemo.class);
    [CODE]

    Merci d'avance pour votre aide.
    Je travail sous ubuntu.

  10. #10
    Inactif  
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    357
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 357
    Points : 637
    Points
    637
    Par défaut
    tu as bien l'import

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    import com.sun.jna.Native;
    ?

  11. #11
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 130
    Points : 47
    Points
    47
    Par défaut
    Merci Furikawari pour votre réponse, j'ai oublié de la rajoutée.
    Et pour l'execuion, comment je lance la commande svp?
    Merci

  12. #12
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 130
    Points : 47
    Points
    47
    Par défaut
    Si je l'execute normalement avec la commande:
    java Exemple.java
    Voici l'erreur qu'il m'affiche:
    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
     
    Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/jna/Library
            at java.lang.ClassLoader.defineClass1(Native Method)
            at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
            at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
            at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
            at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
            at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
            at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
            at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
            at Exemple.main(Exemple.java:18)
    Je dois rajouté quelque chose?

  13. #13
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 130
    Points : 47
    Points
    47
    Par défaut importer des packages dans mon projet
    Bonjour tous le monde.
    Je suis débutante en java,
    Svp comment importé des package a mon projet?
    J'ai télécharger JNA depuis ce lien https://jna.dev.java.net/servlets/Pr...408&folderID=0
    Je veux l'importé a mon projet. Svp comment je fait ?
    Voici mon code:

    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
     
    import com.sun.jna.Library;
    import com.sun.jna.Native;
    import com.sun.jna.Platform;
     
    /** Simple example of native library declaration and usage. */
    public class HelloWorld {
     
        public interface CLibrary extends Library {
            CLibrary INSTANCE = (CLibrary)
                Native.loadLibrary((Platform.isWindows() ? "msvcrt" : "c"),
                                   CLibrary.class);
     
            void printf(String format, Object... args);
        }
     
        public static void main(String[] args) {
            CLibrary.INSTANCE.printf("Hello, World\n");
            for (int i=0;i < args.length;i++) {
                CLibrary.INSTANCE.printf("Argument %d: %s\n", i, args[i]);
            }
        }
    }
    J'arrive pas a bien comprendre la notion de package
    Merci pour votre aide

  14. #14
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    un package est simplement un regroupement de classes qui ont des lien entre eux. Les package sont toujours nommé par une série de mot séparés par des point. exemples:

    • java.awt
    • com.sun
    • java.util
    • java.net
    • etc...

    On fait ce regroupement pour s'y retrouver dans les classes et pour éviter les conflit entre les noms de classe quand plusieurs package contienent de classes de même nom. Un exemple en java est la classe 'Date'. Tu as java.util.Date et java.sql.Date, qui sont deux classes différentes. Il faut bien que le compilateur et la jvm sache de quoi tu parle quand tu parle de Date

    Des classes au sein d'un même package ont accessoirement quelquels privilège (dont l'accès aux champs et méthodes protégés)

  15. #15
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 130
    Points : 47
    Points
    47
    Par défaut
    Merci pour votre réponse.
    Je veux savoir comment le faire.
    J'ai un projet et je veux l'importé.
    Merci

  16. #16
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    çà dépend comment viens la librairie. Si c'est un jar, tu l'ajoute quelque part à ton projet eclipse puis tu fais sur la jar bouton droit -> build path -> add to project build path

  17. #17
    Inactif  
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    357
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 357
    Points : 637
    Points
    637
    Par défaut
    Comme pour la compilation, il faut que tu indiques le renseignes le classpath vers JNA.

  18. #18
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 130
    Points : 47
    Points
    47
    Par défaut
    Oui c'es un fichier jar: "jna.jar"
    Je travail sous linux avec un simple editeur de texte.
    Voici mon code:
    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
     
    import com.sun.jna.Library;
    import com.sun.jna.Native;
    import com.sun.jna.Platform;
     
    /** Simple example of native library declaration and usage. */
    public class HelloWorld {
     
        public interface CLibrary extends Library {
            CLibrary INSTANCE = (CLibrary)
                Native.loadLibrary((Platform.isWindows() ? "msvcrt" : "c"),
                                   CLibrary.class);
     
            void printf(String format, Object... args);
        }
     
        public static void main(String[] args) {
            CLibrary.INSTANCE.printf("Hello, World\n");
            for (int i=0;i < args.length;i++) {
                CLibrary.INSTANCE.printf("Argument %d: %s\n", i, args[i]);
            }
        }
    }
    La compilation marche bien comme ceci: javac -cp jna.jar HelloWorld.java
    Mais au moment de l'exécution voici le message qu'il m'affiche:
    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
     
    Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/jna/Library
            at java.lang.ClassLoader.defineClass1(Native Method)
            at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
            at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
            at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
            at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
            at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
            at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
            at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
            at HelloWorld.main(HelloWorld.java:19)
    Je ne sais pas c'est quoi le probleme.

  19. #19
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    A la base:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -cp .:lib/jni.jar HelloWorld
    tout dépend bien sur d'ou est localisé ton jni.jar

  20. #20
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 130
    Points : 47
    Points
    47
    Par défaut
    Si je le lance avec : java -cp jna.jar HelloWorld

    Voici le message d'erreur: Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld

    NB: à la compilation il m'a créé deux fichiers: HelloWorld$CLibrary.class et HelloWorld.class

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Quels outils conseillez-vous pour faire du "remote pair programming" ?
    Par Pierre8r dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 19/01/2015, 12h17
  2. Quels outils logiciels utiliser pour faire son site ?
    Par tripper.dim dans le forum Outils
    Réponses: 36
    Dernier message: 22/05/2008, 18h39
  3. Réponses: 3
    Dernier message: 13/04/2006, 16h57
  4. [Conception]Quel outil graphique utiliser pour schéma BDD?
    Par nicoaix dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 16/01/2006, 12h34
  5. Réponses: 1
    Dernier message: 04/01/2006, 14h39

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