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

Langage Java Discussion :

Méthode native en Java


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 106
    Par défaut Méthode native en Java
    Bonjour,

    Je cherche à utiliser une DLL dans mon application Java.

    Pour cela, j'ai utilisé une méthode native coucou() que j'ai définie dans la classe Test.java.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class Test
    {
       static {System.loadLibrary("Projet"); }
       public native int coucou();
        public Test(){}
    }
    A partir de cette classe je génère un fichier Test.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <jni.h>
    #ifndef _Included_Test
    #define _Included_Test
    #ifdef __cplusplus
    extern "C" {
    #endif
     
    JNIEXPORT jint JNICALL Java_Test_coucou
      (JNIEnv *, jobject);
     
    #ifdef __cplusplus
    }
    #endif
    #endif
    Avec Visual C++, j'ai créé un projet que j'ai nommé "Projet"

    J'ai un programme Test.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include "Test.h"
    #include <windows.h>
    BOOL WINAPI DllMain(HINSTANCE hinstDll, DWORD fdwReason, LPVOID lpvReserved){
            return TRUE;
        }
     
    JNIEXPORT jint JNICALL Java_Test_coucou (JNIEnv *env, jobject jtest) {
        // je retourne une valeur egale à 1
        return 1;
    }
    J'ai aussi défini un Test.def dans le projet C :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    EXPORTS
    Java_Test_coucou
    Pendant l'exécution j'ai toujours cette ereur dans la console du serveur JBoss :
    java.lang.UnsatisfieldLinkError : coucou at .. (Native Method)
    Quelqu'un aurait-il une idée du problème ?

    Merci d'avance pour votre aide.

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    Commence par essayer d'intégrer ta méthode native dans un programme java standalone. Quand ça fonctionnera, tu essayeras de porter ça sur un serveur d'appli. Là tu t'attaques à tous les problèmes en même temps ce qui rend plus difficile l'identification du point qui pose problème.

    PS: et pense aux balises CODE pour la lisibilité de ton post...
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  3. #3
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    2 questions :

    - ta classe est dans un package ?
    - ta dll est au même endroit que l'application java ?

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre confirmé
    Inscrit en
    Novembre 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 106
    Par défaut
    J'ai abandonné le serveur et je fais une exécution locale mais j'ai toujours cette erreur:
    Exception in thread "main" java.lang.UnsatisfiedLinkError: coucou
    at .....Test.coucou(Native Method)
    Oui ma classe est dans un package.
    Ma DLL elle est dans le dossier System32 de Windows.

  5. #5
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    System.loadLibrary("c:/windows/system32/nomDLL");
    ou
    System.loadLibrary("c:/windows/system32/nomDLL.dll");
    ou
    System.loadLibrary("c:\\windows\\system32\\nomDLL");
    ou
    System.loadLibrary("c:\\windows\\system32\\nomDLL.dll");
    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Non la librairie semble bien chargé, sinon tu aurais eu une erreur du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Exception in thread "main" java.lang.UnsatisfiedLinkError: no Projet in java.library.path

    Ici on dirait plutôt que c'est la fonction native qui n'est pas trouvé...

    Il faudrait donc voir comment tu génères ta DLL, sachant que l'API Win32 utilisé des formats d'appels de méthodes stdcall incompatible avec JNI...

    Essayes de compiler la DLL avec les options --add-stdcall-alias ou -Wl,--kill-at si tu utilises gcc...

    Sinon il faut voir la doc de ton compilateur natif...


    a++

Discussions similaires

  1. "Dé-surcharger" une méthode native javascript
    Par Takezo1584 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 26/08/2007, 12h37
  2. [JNI] Time out sur méthode native
    Par pierre2006 dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 17/11/2006, 11h44
  3. [JNI] Java ne trouve pas mes méthodes natives
    Par carotte31 dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 14/06/2006, 21h47

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