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

API standards et tierces Java Discussion :

[Système] Lancement d'un exe


Sujet :

API standards et tierces Java

  1. #1
    Membre éprouvé
    Inscrit en
    Mai 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 130
    Par défaut [Système] Lancement d'un exe
    Alors voila, j'ai un probleme que je ne m'explique pas.
    Mon appli java crée un fichier de configuration dans un rep. Je lance ensuite l'exe C++ depuis java mais il ne trouve pas le fichier.
    Pourtant que je lance l'exe à la main (directement, sans passer par java), il trouve ce fichier qui est dans le même répertoire. Le fait de le lancer depuis java change quoi?...

    la classe de lancement:
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    /**
    * Appel de l'executable qui va acquerir les donnees, avec synchronisation
    * 
    * @author Mateo & JS
    */
     
    package ressources;
     
    //---------------------------------------------------------------------------
    //Imports
    import java.io.*; 
     
    //---------------------------------------------------------------------------
        public class Launcher extends Thread {
            private String commande;
     
            /** Création et démarrage automatique du thread */
            public Launcher(String commande) {
                this. commande= commande;
                this.start();
            }
     
            public void run() {
            	 try{ 
            		 Runtime run= Runtime.getRuntime(); 
            		 String cmd= commande; 
            		 Process proc= run.exec(cmd); 
            		 InputStream stderr = proc.getErrorStream(); 
            		 InputStreamReader isr = new InputStreamReader(stderr); 
            		 BufferedReader br = new BufferedReader(isr); 
            		 String line = null; 
            		 while ( (line = br.readLine()) != null) 
            		System.out.println(line); 
            		 /*int exitVal =*/proc.waitFor(); 
            }catch(Throwable t) {t.printStackTrace();}
        } 
    }

  2. #2
    Membre émérite Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Par défaut
    Tu lances avec quoi comme paramètre à ton Launcher?

  3. #3
    Membre Expert
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Par défaut Re: Lancement d'un exe
    Citation Envoyé par MeDioN
    Le fait de le lancer depuis java change quoi?...
    [JOKE]ça change tout! [/JOKE]

    Je suppose que tu utilises des chemins relatifs. Je te conseille dans ce genre de cas de n'utiliser que des chemins absolus.

  4. #4
    Membre éprouvé
    Inscrit en
    Mai 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 130
    Par défaut
    Justement avec les chemins absolus ça marche mais ce n'est absolument pas le but!
    Le logiciel doit être portable. Donc en gros l'exe doit pouvoir toujours comprendre qu'il se trouve dans le même répertoire que le fichier configuration à parser. Le plus étrange est qu'il le comprend très bien quand il n'est pas lancé par java.

    En paramètre je passe ("./scripts/spotting") car l'exe se trouve dans le répertoire scripts de mon projet.

  5. #5
    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,


    Quel commande tu utilises dans ton application Java ? Que vaut 'cmd' ?
    Quel est la commande que tu utilises pour lancer ton application C++ 'à la main' ?

    Et quel est le répertoire de travail de ton appli Java et de ton appli C++ lorsque tu la lance à la main ?

    a++

  6. #6
    Membre émérite Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Par défaut
    Citation Envoyé par MeDioN
    En paramètre je passe ("./scripts/spotting") car l'exe se trouve dans le répertoire scripts de mon projet.
    Essaie ../scripts/spotting

    si ca marche pas donne-nous la structure de ton projet

  7. #7
    Membre Expert
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Par défaut
    Citation Envoyé par MeDioN
    Justement avec les chemins absolus ça marche mais ce n'est absolument pas le but!
    Le logiciel doit être portable. Donc en gros l'exe doit pouvoir toujours comprendre qu'il se trouve dans le même répertoire que le fichier configuration à parser. Le plus étrange est qu'il le comprend très bien quand il n'est pas lancé par java.

    En paramètre je passe ("./scripts/spotting") car l'exe se trouve dans le répertoire scripts de mon projet.
    Où ton exe cherche son fichier de configuration?
    - Dans le répertoire courant?
    - Dans le réperoire où se trouve son exe

    Avec cette commande, ton exe trouve-t-il son fichier de configuratin?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Repertoire_x > ../Repertoire_y/exe config

  8. #8
    Membre éprouvé
    Inscrit en
    Mai 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 130
    Par défaut
    adiGuba => cmd c'est ce que j'ai donné pour le paramètre
    Pour lancer l'exe C++ je double clique dessus ^^
    L'exe C++ se trouve dans le répertoire /scripts/ de mon projet java.

    pollux=> les deux points ça change quoi?

    jowo=>Quand je le lance a la main l'exe prends le fichier de configuration dans le même repertoire que celui où il se trouve. Quand je le lance depuis java il ne le fait plus. L'exe et le fichier de config se trouvent au même endroit, donc pas dans le répertoire courant du projet mais en dessous.

    Avec cette commande, ton exe trouve-t-il son fichier de configuratin?

    Code:
    Repertoire_x > ../Repertoire_y/exe config
    =>J'attends qu'on me renvoie l'exe car il se trouve à l'école et je ne l'ai pas récupéré. Je testerai (mais j'ai pas compris ta commande là)

  9. #9
    Membre éprouvé
    Inscrit en
    Mai 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 130
    Par défaut
    En fait ce que je veux c'est un appel d'exe qui fasse la même chose que si je cliquais deux fois sur l'icone exe ^____^

  10. #10
    Membre émérite Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Par défaut
    Les deux points montent d'un niveau dans l'arborescences... Ca devrait marcher si ton rep scripts se trouve au même niveau que bin.. Mais tout dépend de ta structure

  11. #11
    Membre Expert
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Par défaut
    Citation Envoyé par MeDioN
    En fait ce que je veux c'est un appel d'exe qui fasse la même chose que si je cliquais deux fois sur l'icone exe ^____^
    Justement le problème vient de là.

    En cliquant sur ton icone, tu ne sais pas ce que l'OS fait exactement derrière.
    Il se peut qu'il crée un environnement où le répertoire courant est le même que celui de ton exe.

    [JOKE]Tout bon informaticien qui se respecte ne travaille qu'en mode console. [/JOKE]

    Pour venir à ton cas, il faut démarrer ton processus avec la méthode exec(String[] cmdarray, String[] envp, File dir) (ma préférée) ou la méthode exec(String command, String[] envp, File dir) (à éviter).

    envp peut être null et ainsi ton sous-processus hérite de l'environnement du processus parent.

    dir est le répertoire courant (working directory) où ton sous-processus doit tourner. Tu trouveras plus d'infos dans la JavaDoc.

  12. #12
    Membre éprouvé
    Inscrit en
    Mai 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 130
    Par défaut
    Ok c'est bon merci jowo.
    Grace a ce que tu as dit j'ai pigé le probleme. En fait java lance l'exe et celui ci prend comme répertoire courant non plus le sien comme c'était le cas si lancé à la main mais celui de l'appli java!
    En changeant donc le code C++ ça marche nickel.
    Merci à tous!

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

Discussions similaires

  1. Lancement d'un exe
    Par MeDioN dans le forum API standards et tierces
    Réponses: 9
    Dernier message: 28/08/2007, 11h08
  2. lancement d'un exe
    Par Barbibul dans le forum Autres Logiciels
    Réponses: 14
    Dernier message: 20/07/2006, 20h58
  3. Passage de paramétre au lancement d'un exe
    Par emerysky dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 19/06/2006, 18h58
  4. [Système] Appel d'un exe avec passage de paramètres
    Par licorne dans le forum Langage
    Réponses: 2
    Dernier message: 04/05/2006, 12h57
  5. [Système] Lancer un éxécutable (.exe)
    Par antrax2013 dans le forum Langage
    Réponses: 7
    Dernier message: 24/11/2005, 10h04

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