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

Java Discussion :

appel d'un programme c++ en java


Sujet :

Java

  1. #1
    Membre régulier

    Inscrit en
    Août 2007
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 308
    Points : 100
    Points
    100
    Billets dans le blog
    1
    Par défaut appel d'un programme c++ en java
    Bonjour à tous
    je suis débutante en java. Je voulais savoir si on peut faire appel à programme exe écrit en C++ dans du code java

    si oui, merci de me dire comment???

  2. #2
    Membre chevronné
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Points : 2 197
    Points
    2 197
    Par défaut
    Bonjour, ce que tu cherches est dans la http://java.developpez.com/faq/java/...icationExterne

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 335
    Points : 511
    Points
    511
    Par défaut
    Bonjour,
    pour appeler un programme .exe quel que soit le langage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    java.lang.Runtime.exec(String[]);
    pour appeler du code C, il faut utiliser JNI:
    http://java.sun.com/developer/online...CBook/jni.html

    D'autres interactions programme java avec C sont possible comme d'utiliser des web-service ou du corba, mais c'est plus une architecture client-serveur.

  4. #4
    Membre régulier

    Inscrit en
    Août 2007
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 308
    Points : 100
    Points
    100
    Billets dans le blog
    1
    Par défaut Merci!!
    merci pour vos réponses. Je vais tester et je vous tiens au courant

  5. #5
    AkH
    AkH est déconnecté
    Membre du Club
    Homme Profil pro
    Perso
    Inscrit en
    Juillet 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Perso

    Informations forums :
    Inscription : Juillet 2005
    Messages : 58
    Points : 52
    Points
    52
    Par défaut
    Si c'est une fonction en C ou C++ que tu veux appeler depuis java et non un .exe,
    alors ton code C/C++ doit obligatoirement se trouver dans une DLL (ou .so sous unix).

    Sinon il est imossible d'appeler une fonction d'un .exe.
    Mais pour avoir tester JNI, y a pas plus chien et plus merdique

    Si c'est de l'échange de donnée que tu veux faire entre les deux => fait du client/serveur par socket,
    c'est plus simple. (ton serveur sera le programme en C/C++)

  6. #6
    Membre régulier

    Inscrit en
    Août 2007
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 308
    Points : 100
    Points
    100
    Billets dans le blog
    1
    Par défaut pas résolu
    Re,

    j'ai testé de cette façon, mais rien ne se produit. est ce que je dois placer mon exe quelque part dans le projet car là, j'ai juste indiqué le chemin dans la commande

    try {
    Process proc = Runtime.getRuntime().exec("/home/nina/Test/ ./monProgramme -i BaseC.txt -a 700 -d 0 res.txt");
    } catch (IOException e1) {

    }

    merci de m'aider

  7. #7
    Membre régulier

    Inscrit en
    Août 2007
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 308
    Points : 100
    Points
    100
    Billets dans le blog
    1
    Par défaut
    AkH...je ne veux pas écrire du code C++ dans du code java. je veux juster invoquer un prog C++ à s'executer

  8. #8
    AkH
    AkH est déconnecté
    Membre du Club
    Homme Profil pro
    Perso
    Inscrit en
    Juillet 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Perso

    Informations forums :
    Inscription : Juillet 2005
    Messages : 58
    Points : 52
    Points
    52
    Par défaut
    il y a pas un truc bizard ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    /home/nina/Test/ ./monProgramme
    j'aurais soit mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ./monProgramme.exe
    soit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    /home/nina/Test/monProgramme.exe
    après j'en suis pas sur

  9. #9
    Membre régulier

    Inscrit en
    Août 2007
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 308
    Points : 100
    Points
    100
    Billets dans le blog
    1
    Par défaut
    j'ai juste mis la commande que j'utilise habituellement en console pour éxecuter mon programme en C++ qui est la suivante :

    ./monProgramme -i BaseC.txt -a 700 -d 0 res.txt (sans sépcifier .exe)

    pas de suggestion???

  10. #10
    Membre chevronné
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Points : 2 197
    Points
    2 197
    Par défaut
    Je pense qu'il faut que tu regardes le chapitre V-B. Solution de http://ydisanto.developpez.com/tutoriels/j2se/runtime/

  11. #11
    AkH
    AkH est déconnecté
    Membre du Club
    Homme Profil pro
    Perso
    Inscrit en
    Juillet 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Perso

    Informations forums :
    Inscription : Juillet 2005
    Messages : 58
    Points : 52
    Points
    52
    Par défaut
    scuse pour le .exe (abutide de windob) et oui sous unix il y en a pas

    Citation Envoyé par nina2007 Voir le message
    pas de suggestion???
    je t'avourais que sans ton program je peu pas t'aider plus car j'ai jamais tenter d'appeler un prog

    Mon message plus au n'etais pas tant pour le .exe mais pour le path:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    /home/nina/Test/ ./monProgramme

  12. #12
    Membre averti Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Points : 306
    Points
    306
    Par défaut
    Il y a néanmoins des manières beaucoup plus propres (mais plus compliquées) de faire ça, en utilisant la programmation native.

    Ceci permet entre autre de faire appel à des fonctions écrites en C/C++ en Java et inversément, ce qui peut s'avérer très pratique, si tu trouve par exemple que le Java est bien pour la majorité de ton application mais pas pour un petit morceau, tu peux écrire ce morceau en C et y faire appel comme si de rien n'était.

    C'est très pratique parfois mais ça a ses inconéviants, comme par exemple la perte de la portabilité.

    Je veux bien te taper un mini tutoriel si ça t'interesse mais là j'ai pas le temps donc si ça t'interesse envoie-moi un message privé pour me le rapeller (sinon je vais l'oublier lol).
    On a toujours besoin d'un plus bourrin que soi

    Oui il y a quelques bugs dans ma librairie de Sécurité, mais les classes postées ne sont pas celles de la dernière version, et j'ai la flemme de tout modifier. Je vous donnerai avec plaisir la dernière version du jar par mp.

  13. #13
    AkH
    AkH est déconnecté
    Membre du Club
    Homme Profil pro
    Perso
    Inscrit en
    Juillet 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Perso

    Informations forums :
    Inscription : Juillet 2005
    Messages : 58
    Points : 52
    Points
    52
    Par défaut
    apparement il a déjà fais son appli et veux juste l'appeler.
    Donc c'est juste un problème de syntaxe pour appeler son prog avec les bon arguments.

    Razgriz, je voulais moi aussi faire un tuto sur JNI (car c'est ultra casse couille quand tu t'y mes la première fois) mais idem, pas le temps.

    Pour la portabilité, générer le code via gcc en .dll et en .so puis dans java, tester le system et charger la bonne librairie en fonction.

  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
    Citation Envoyé par nina2007 Voir le message
    Re,

    j'ai testé de cette façon, mais rien ne se produit. est ce que je dois placer mon exe quelque part dans le projet car là, j'ai juste indiqué le chemin dans la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    try {
    			        Process proc = Runtime.getRuntime().exec("/home/nina/Test/ ./monProgramme -i BaseC.txt -a 700 -d 0 res.txt");
    			} catch (IOException e1) {
     
    			}
    merci de m'aider
    Déjà, faut pas préciser le folder dans le exec. Ou alors imaginons le folder complet), faut retirer ce sale espace qui traine au milieu .
    Ensuite, çà:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    } catch (IOException e1) {
     
    			}
    C'est très très très mauvais. Si je donnais cours de java et qu'un de mes élève m'écrit çà, zéro pointé! Tu ignore purement et simplement l'erreur sans meme essayer de savoir ce que c'est
    remplace par ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    } catch (IOException e1) {
    			e1.printStackTrace();        
    			}
    Et donne nous l'erreur.

    Enfin, si ton application externe a besoin de données à tapper au clavier ou doit faire de l'output à l'écran, faut pas oublier qu'en java c'est à toi de le faire (récupération des input/output sur le Process retourné par exec)

  15. #15
    Membre régulier

    Inscrit en
    Août 2007
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 308
    Points : 100
    Points
    100
    Billets dans le blog
    1
    Par défaut
    toujours pas de solution....tchize, ça fait exactement une semaine que je mets à programmer en java (ce qui explique ma note "zéro)


    mais je désespère pas : voilà l'erreur sachant que j'ai supprimé le vilain espace
    Il ne trouve pas le chemin je ne comprends pas pourquoi???



    java.io.IOException: Cannot run program "home/nina/Test/./monProgramme -i BaseC.txt -a 700 -d 0 res.txt": java.io.IOException: error=2, No such file or directory
    at java.lang.ProcessBuilder.start(Unknown Source)
    at java.lang.Runtime.exec(Unknown Source)
    at java.lang.Runtime.exec(Unknown Source)
    at mv.QuitterMenu.actionPerformed(QuitterMenu.java:22)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.AbstractButton.doClick(Unknown Source)
    at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
    at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
    Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory
    at java.lang.UNIXProcess.<init>(Unknown Source)
    at java.lang.ProcessImpl.start(Unknown Source)
    ... 31 more

  16. #16
    Membre régulier

    Inscrit en
    Août 2007
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 308
    Points : 100
    Points
    100
    Billets dans le blog
    1
    Par défaut Résolu
    voilà j'ai résolu le problème, il fallait utilser un String[] args pour utiliser une commande avec des paramétres et puis passer chaque paramétre entre " "

    merci à vous tous pour votre aide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Runtime runtime = Runtime.getRuntime();
    				String[] args = {"/home/nina/Test/./monProgramme", "-i", "/home/nina/Test/b.txt", "-o", "fichier.txt"};
    				 final Process process = runtime.exec(args);

  17. #17
    Membre régulier

    Inscrit en
    Août 2007
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 308
    Points : 100
    Points
    100
    Billets dans le blog
    1
    Par défaut résolu
    voilà j'ai résolu le probléme, il fallait utliser un String[] args pour passer une commande avec des paramétres dans des " "

    merci à vous tous pour votre aide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Runtime runtime = Runtime.getRuntime();
    				String[] args = {"/home/nina/Test/./monProgramme", "-i", "/home/nina/Test/input.txt", "-o", "output.txt"};
    				 final Process process = runtime.exec(args);

  18. #18
    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
    manque visiblement un / en début de commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ls home/nina/Test/./monProgramme
    te dira aussi qu'il trouve pas

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Appel d'un programme JAVA depuis une procedure PL/SQL
    Par farenheiit dans le forum PL/SQL
    Réponses: 8
    Dernier message: 04/03/2008, 11h03
  2. Réponses: 3
    Dernier message: 07/11/2005, 17h33
  3. Réponses: 2
    Dernier message: 08/09/2005, 12h18
  4. DLL Visual C++ appelée dans un programme Visual Basic
    Par marseillais57 dans le forum MFC
    Réponses: 7
    Dernier message: 21/07/2005, 14h57
  5. [JDBC] Programmation autre que Java
    Par Vow dans le forum JDBC
    Réponses: 2
    Dernier message: 23/06/2004, 11h22

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