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 :

Lancement application externe (autres que .exe)


Sujet :

Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 23
    Points : 14
    Points
    14
    Par défaut [Résolu] Lancement application externe (autres que .exe)
    Bonjour,

    Je souhaiterais savoir s'il est possible de lancer une application, autre qu'un executable .exe, depuis un programme.
    Par exemple, lancer un fichier de type .doc avec le logiciel associé.

    Il m'est possible de lancer un .exe avec une méthode ressemblant au sujet de la FAQ :

    Citation Envoyé par Clément Cunin
    Execution :
    L'exécution d'un programme externe se fait grâce à la méthode exec(java.lang.String commande) de la classe java.lang.Runtime.


    try {
    Process proc = Runtime.getRuntime().exec("commande paramétrée");
    } catch (IOException e) {

    }

    Communication :
    Il est possible de communiquer avec l'application grâce à l'objet java.lang.Process :

    * destroy() pour tuer l'application fille.
    * waitFor() pour attendre la fin de l'application fille (Attention à ne pas bloquer l'exécution du processus d'évènement awt).
    * getErrorStream(), getInputStream() et getOutputStream() pour communiquer avec l'application.
    * exitValue() pour connaître l'état de sortie de l'application.
    Néanmoins le seul paramètre valide semble être un .exe. Existe t'il une méthode alternative ? Ou encore une autre approche ? Je reste ouvert à toutes idées pour lancer un fichier autre que .exe à partir de mon appplication JAVA.

    Merci pour votre aide,

    Pierre.

  2. #2
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 562
    Points : 15 493
    Points
    15 493
    Par défaut
    Depuis java 1.6, tu peux utiliser la classe Desktop qui est exactement faite pour cela.

    Pour les versions précédentes, tu peux utiliser la bibliothèque native JDIC.

    Ou plus simple sous windows, tu dois pouvoir t'en sortir avec la commande windows start:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    try {
       Process proc = Runtime.getRuntime().exec(new String[]{"cmd", "/c", "start", monFichierDoc});
    } catch (IOException e) {
       //code en cas d'exception
    }
    Et si tu n'a

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 23
    Points : 14
    Points
    14
    Par défaut
    Merci pour ta réponse rapide !

    Je m'oriente vers Desktop et JDIC alors, et donnerai des nouvelles sous peu !

    (ton message s'est arrêté à "et si tu n'a", avais tu autre chose à dire ?)

  4. #4
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 562
    Points : 15 493
    Points
    15 493
    Par défaut
    Heu... non!
    Je sais pas ce que ca viens faire la je devais pas être bien réveillé.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 23
    Points : 14
    Points
    14
    Par défaut
    Le problème est résolu, merci.

    J'ai simplement utilisé une méthode de Runtime :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	public String []cmd ={"C:\\wish83.exe","C:\\path.tcl", "&"}; 
        	Process p = Runtime.getRuntime().exec(cmd);
    Le premier paramètre pour l'executable du logiciel et le 2eme pour le fichier qui s'ouvre avec le logiciel. (le tableau de String pour éviter le problème des espaces dans le path ("Program Files"))
    Le "&" est un essai pour que le programme principal garde la main, mais il semblerais que ça ne fonctionne que sous unix.

  6. #6
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 562
    Points : 15 493
    Points
    15 493
    Par défaut
    Même sous unix le "&" ne fonctionnerait pas. En effet exec() ne fait pas office de shell. Il démarre uniquement un exécutable avec les paramètres donnés. toutes les commandes qui dépendent du shell comme cd, copy, attrib, net, ... et les mécanismes qui lui sont propres comme les redirections, pipes, ... ne sont pas gérés.

    Qu'entends tu par "pour que le programme principal garde la main"? Normalement le programme principal devrait continuer son exécution sans difficulté après avoir démarré l'exécutable.

  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
    Bonjour

    presque dans le meme contexte, je voudrai lancer une commande unix
    j'ai bien que .exec ne gére pas ça mais en donnant une commande simple par exemple ls, ça fonctionne bien
    voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      String[] s = { "ls" };
                 	final Process process = rt.exec(s);
    mais je veux intégrer les pipes "|"et les redirections ">" je fais quoi alors?
    merci si vous avez une idée ou un exemple

  8. #8
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 562
    Points : 15 493
    Points
    15 493
    Par défaut
    ls ne fonctionne pas en tant que commande shell. Si cela fonctionne quand même chez toi, c'est parce ls existe aussi sous forme de fichier exécutable dans /bin.
    Avec d'autre commandes shell qui n'existent pas sous forme d'exécutable(comme read, eval, ...), ca ne fonctionnera pas.

    Pour utiliser une ligne qui nécessite le shell, il faut démarrer le shell et lui passer la ligne a exécuter en paramètre :
    - Pour Windows il faut démarrer cmd avec l'option /c
    - Pour Linux(et probablement les autre OS de type UNIX) il faut démarrer sh avec l'option -c

    Dans ton cas il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String[] s = { "sh", "-c", "ls >sortie" };
    final Process process = rt.exec(s);

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 23
    Points : 14
    Points
    14
    Par défaut
    Merci pour ces explications sur la méthode exec().

    Citation Envoyé par Uther
    Qu'entends tu par "pour que le programme principal garde la main"? Normalement le programme principal devrait continuer son exécution sans difficulté après avoir démarré l'exécutable.
    Le programme principal lance une interface swing. Cette interface permet entre autres de lancer un autre logiciel (fortran90 avec une interface TCL/TK).
    (Pourquoi ne pas tout passer en JAVA ? Car les logiciels fortran90 impliqués sont des logiciels lourds (maintien à poste de satellite) non éditables pour des raisons légales.)

    Une fois ce logiciel et son interface lancés, l'interface du logiciel principal semble gelée : les commandes imposées sont conservées en buffer et executées une fois le logiciel secondaire fermé.
    Le problème peut venir des threads ou plus probablement de l'interface graphique, que je serais susceptible d'aborder dans la partie du forum "Graphique" une fois que j'aurai revu le code plus en détails.

  10. #10
    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, ça a marche pour moi

Discussions similaires

  1. [D2010]Problème lancement application externe
    Par tokazio dans le forum Langage
    Réponses: 7
    Dernier message: 28/08/2012, 15h13
  2. Problème lancement d'une application externe
    Par cl@ndestIno dans le forum C#
    Réponses: 3
    Dernier message: 19/02/2009, 17h51
  3. Faire un lien externe (soit autre que montsite.com/unepage.html )
    Par JoJo1234 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 15/05/2007, 13h46
  4. [VB6] Lancement d'une application externe
    Par ahouba dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 31/05/2006, 15h42
  5. Minimize Maximize perso sur une form autre que Application
    Par sdebrois dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 07/03/2005, 17h59

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