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 :

Utilisation de JNI sous Windows


Sujet :

Entrée/Sortie Java

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2005
    Messages : 159
    Points : 108
    Points
    108
    Par défaut Utilisation de JNI sous Windows
    Salut !

    J'ai quelques soucis pour utiliser JNI

    Tout d'abord, voila quelques infos concernant mon ordi, histoire de poser le décor :
    - Win XP comme OS
    - Eclipse pour compiler le JAVA
    - Dev C pour compiler le C

    Tous les tutos que j'ai consulté donnent cette méthode :
    1- Ecrire code JAVA (avec appel de la dll) - ça c'est fait
    2- Compiler code java (sauf que là j'ai un problème : eclipse veut pas compiler car il trouve pas le fichier dll, normal puisqu'on la créée à l'étape 4...)
    3- Générer fichier .h avec javah (c'est quoi javah ? ça marche aussi avec windows ?)
    4- Ecrire code C (en incluant le .h) - ça c'est fait aussi
    5- "Enfin, il ne reste plus qu'a générer le fichier .dll" (point final... les rédacteurs de tutos ont pas pensé que c'était pas aussi évident pour les p'tits débutants comme moi ^^)

    Voila mon code JAVA :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class VLCJNI {
     
    	public static native void SetVlcForeground();
    	static {
    		System.loadLibrary("SetVlcForegroundLib");
                                    // appel du fichier dll
    	}
    	public static void main(String[] args) {
    		 VLCJNI.SetVlcForeground();
                                     // lancement du bout de code ecrit en C
    	}
    }
    et mon code C (normalement le contenu n'a pas trop d'importance)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <jni.h>
    #include <windows.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include “VLCJNI.h”
     
    JNIEXPORT void JNICALL 
    Java_VLCJNI_SetVlcForeground(JNIEnv *env, jobject obj) 
    { 
      HWND hvlc = FindWindow("wxWindowClassNR",NULL);
      SetForegroundWindow(hvlc);
      return 0;
    }
    Quelqu'un pourrait m'expliquer clairement comment se servir de JNI avec Windows ?

    Merci d'avance


    Mad

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 94
    Points : 113
    Points
    113
    Par défaut
    Si t'es debutant, ce n'est pas par JNI qu'il faut commencer ...

    Tu peux voir ces excellents cours et tutoriels pour apprendre le langage Java : http://java.developpez.com/cours/

  3. #3
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 814
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 814
    Points : 7 642
    Points
    7 642
    Par défaut
    Salut,

    En passant, dans ta procédure C, la déclarer en "void", et faire un "return 0" à la fin, ça colle pas trop...
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 845
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 845
    Points : 22 850
    Points
    22 850
    Billets dans le blog
    51
    Par défaut
    Ca depend des compilateurs et des platformes. Pour certaines versions du language avoir un type de retour void et faire return 0 ce n'est pas incompatible ni mutuellement exclusif.

    javah est un des outils fournis avec le JDK, c'est le compilateur qui creera ton header .h a partir de ta classe native. Il se trouve dans le repertoire bin du JDK.
    La section JNI du Java tutorial de Sun dont l'URL est donnee dans la documentation est toujours aux abonnes absents sur leur site web mais tu peux telecharger une version offline du didacticiel http://java.sun.com/docs/books/tutorialNB/download/tut-native1dot1.zip

    Quand a faire des DLL, il faut regarder la doc (ou en chercher) de ton outils de devellopement C. Pose cette question dans les forums concernes.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2005
    Messages : 159
    Points : 108
    Points
    108
    Par défaut
    Si t'es debutant, ce n'est pas par JNI qu'il faut commencer ...
    Je suis débutant avec JNI, en JAVA j'ai déja quelques notions ;-)

    En passant, dans ta procédure C, la déclarer en "void", et faire un "return 0" à la fin, ça colle pas trop...
    T'as raison, ça a l'air bizarre, mais comme le prog en C marche parfaitement (indépendament du code JAVA) j'avais pas trop fait attention.

    javah est un des outils fournis avec le JDK
    C'est quoi le JDK ? C'est un nom pour designer un compilateur JAVA en général (Eclipse pour moi) ? ou bien c'est le nom d'un compilateur ?

    Je vais jeter un coup d'oeil au lien

    Merci à tous


    Mad

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 44
    Points : 42
    Points
    42
    Par défaut
    JDK = Java Development Kit
    Google is your friend !

    Que veux tu savoir sur JNI en fait ? C'est vaste pour un forum...

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2005
    Messages : 159
    Points : 108
    Points
    108
    Par défaut
    JDK = Java Development Kit
    ça ja sais merci ^^, mais ça me dit pas ce que c'est concretement...

    Que veux tu savoir sur JNI en fait ?
    En gros, le but de mon prog est de mettre une fenetre au premier plan, mais apparement c'est pas possible en JAVA. Par contre c'est possible en C. Donc je veux me servir de JNI pour que mon prog JAVA execute 2 lignes de code C.

    Le problème c'est que les tutos que j'ai trouvés sur google sont assez vagues, et plutot orientés pour une utilisation sous linux...

    Donc voila, si quelqu'un a une méthode détaillée pour windows, ça m'arrange ^^

    javah est un des outils fournis avec le JDK, c'est le compilateur qui creera ton header .h a partir de ta classe native. Il se trouve dans le repertoire bin du JDK.
    Si JDK = Platforme JAVA, alors là je vois ce que c'est, le problème c'est que je n'ai rien qui ressemble à javah dans le repertoire "Java\j2re1.4.2_06\bin"

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 44
    Points : 42
    Points
    42
    Par défaut
    JDK, c'est l'ensemble des outils permettant de developper des applications java. Il comprend par exemple javac (le compilateur) et javah (pour creer les headers). Le JDK, c'est juste cet ensemble.

    Sinon, concernant JNI, j'ai travaillé dessus il y a 2 ans et j'etais tres satisfait. Mais j'ai galéré pour apprendre. Il me semble que j'avais trouvé sur le net un totorial....en Espagnol qui était très clair sur le sujet.

    Cherche des tutorials sur google et tu trouveras sans doute des choses intéressantes.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 44
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par madislak
    En gros, le but de mon prog est de mettre une fenetre au premier plan, mais apparement c'est pas possible en JAVA. Par contre c'est possible en C. Donc je veux me servir de JNI pour que mon prog JAVA execute 2 lignes de code C.
    Je pense (à confirmer) que tu confonds deux choses.

    Ta couche JAVA te permet de dessiner ton interface graphique et eventuellement de faire quelques opérations.

    Ta couche C, en revanche, va te servir à effectuer certaines opérations mais n'a aucune influence sur l'interface, si ce n'est la mise à jour d'informations dans les controles.

    A confirmer bien sur si mes souvenirs sont bons...

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 44
    Points : 42
    Points
    42
    Par défaut
    Ah, je n'avais pas vu ton code initial, effectivement ca devrait marcher comme ca. Autant pour moi....

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 44
    Points : 42
    Points
    42
    Par défaut
    Sous Linux, il ne faut pas creer une DLL mais un fichier .so qui est une librairie Linux. Par contre, je ne me rappelle plus la ligne de compilation...à retrouver...

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 44
    Points : 42
    Points
    42
    Par défaut
    Tiens, j'ai trouvé ca sur le net pour compiler le .so :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cc -I/usr/local/src/jdk1.2.2/include -I/usr/local/src/jdk1.2.2/include/linux -shared -o libhello.so printHelloWorld.c
    En remplacant par les bons chemins. Par contre, il me semble que le .so doit commencer par lib (comme ici)

    http://www-stat.stanford.edu/~naras/java/course/lec5/lec5.html

  13. #13
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2005
    Messages : 159
    Points : 108
    Points
    108
    Par défaut
    Merci à toi c'est gentil
    Mais comme je l'ai précisé dans mon 1er post, j'ai windows et pas linux... (j'avoue que pour une fois j'aurais bien aimé avoir linux, la ligne de commande ça à l'air bien pratique quand on a la syntaxe sous la main ;-) )

    JDK ça marche aussi avc Windows ?

  14. #14
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 845
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 845
    Points : 22 850
    Points
    22 850
    Billets dans le blog
    51
    Par défaut
    Bien sur, tu peux le telecharger en standalone depuis le site de Sun (il y a une version sans NetBeans si tu regardes bien). Mais si tu as Eclipse et que tu peux deja programmer en Java, c'est que tu as deja un JDK ; va donc explorer les sous-repertoires de l'installation d'Eclipse et aussi C:\program files\java\....
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  15. #15
    Membre confirmé Avatar de gronono
    Inscrit en
    Novembre 2003
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2003
    Messages : 456
    Points : 482
    Points
    482
    Par défaut
    Citation Envoyé par bouye
    Mais si tu as Eclipse et que tu peux deja programmer en Java, c'est que tu as deja un JDK
    Eclipse n'a pas besoin d'un JDK pour fonctionner.
    Une JRE (Java Runtime Environnemt) suffit. En effet Eclipse integre son propre compilateur qui permet de compilateur.

  16. #16
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 845
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 845
    Points : 22 850
    Points
    22 850
    Billets dans le blog
    51
    Par défaut
    Autant/au temps pour moi, je penchais pour une architecture similaire a JBuilder qui lui inclue dans ses sous-rep un JDK tout a fait standard (meme si il utilise aussi des outils specifiques a Borland).
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 44
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par madislak
    Mais comme je l'ai précisé dans mon 1er post, j'ai windows et pas linux... (j'avoue que pour une fois j'aurais bien aimé avoir linux, la ligne de commande ça à l'air bien pratique quand on a la syntaxe sous la main ;-) )
    Tu utilises quoi comme compilateur C ? En sachant ca, ca sera plus facile pour savoir comment construire ta DLL

    Citation Envoyé par madislak
    JDK ça marche aussi avc Windows ?
    Bien sur

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 44
    Points : 42
    Points
    42
    Par défaut Re: Utilisation de JNI sous Windows
    Reprenons les étapes :

    Citation Envoyé par madislak
    1- Ecrire code JAVA (avec appel de la dll) - ça c'est fait
    2- Compiler code java (sauf que là j'ai un problème : eclipse veut pas compiler car il trouve pas le fichier dll, normal puisqu'on la créée à l'étape 4...)
    3- Générer fichier .h avec javah (c'est quoi javah ? ça marche aussi avec windows ?)
    4- Ecrire code C (en incluant le .h) - ça c'est fait aussi
    5- "Enfin, il ne reste plus qu'a générer le fichier .dll" (point final... les rédacteurs de tutos ont pas pensé que c'était pas aussi évident pour les p'tits débutants comme moi ^^)
    1 - La 1 est faite !
    2 - Pour compiler ta classe, j'utiliserais directement javac fourni dans le JDK de JAVA...C'est bizarre qu'Eclipse ne veuille pas le compiler...
    3 - Utilise javah fourni dans le JDK
    4 - C'est fait !
    5- Reste à savoir quel compilateur C tu utilises

  19. #19
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut Re: Utilisation de JNI sous Windows
    Salut,

    Citation Envoyé par madislak
    2- Compiler code java (sauf que là j'ai un problème : eclipse veut pas compiler car il trouve pas le fichier dll, normal puisqu'on la créée à l'étape 4...)
    Tu ne confondrais pas "compilation" et "exécution" par hazard ?

    a++

  20. #20
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2005
    Messages : 159
    Points : 108
    Points
    108
    Par défaut
    Eclipse n'a pas besoin d'un JDK pour fonctionner
    Ah! je m'en doutais un peu... donc je fais comment pour créer mon .h maintenant ? Parce que si j'ai pas de JDK, j'ai pas javah, ni javac...

    Tu ne confondrais pas "compilation" et "exécution" par hazard ?
    Peut être ja sais pas. Tu crois que si je compile juste sans l'exectuter ça ne me mettra pas d'erreur ? Je vais essayer en tout cas.

    Reste à savoir quel compilateur C tu utilises
    Comme je l'ai AUSSI précisé dans mon 1er post, j'utilise DevCpp pour compiler le C.

    D'ailleur j'ai vu que je pouvais ouvrir un projet DLL (donc je l'ai fait), mais une fois que le nouveau projet est ouvert, je fais quoi ? je vire ce qu'il me propose (un truc du genre "dllimport void helloworld") et je le remplace par mon code C, sachant que dans mon code C y a rien qui ressemble à "dllimport" (voir mon code page précédente) ?

    Merci

    Mad

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

Discussions similaires

  1. utiliser les PID sous Windows XP (waitpid,etc)
    Par busard dans le forum Général Python
    Réponses: 4
    Dernier message: 25/10/2007, 11h28
  2. Utiliser dalle tactile sous windows.
    Par undercrash dans le forum Périphériques
    Réponses: 2
    Dernier message: 18/10/2007, 13h53
  3. Aide pour l'utilisation de libxml++ sous windows
    Par adoumaz dans le forum XML
    Réponses: 1
    Dernier message: 07/09/2007, 15h54
  4. Utilisation de is_dir sous windows avec php5
    Par SWaPPeR dans le forum Langage
    Réponses: 2
    Dernier message: 07/11/2006, 16h45
  5. utilisation des sockets sous windows
    Par Tupac dans le forum Réseau
    Réponses: 2
    Dernier message: 21/12/2002, 18h24

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