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

Interfaces Graphiques en Java Discussion :

Comment bloquer le programme appelant Runtime.exec()?


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 8
    Par défaut Comment bloquer le programme appelant Runtime.exec()?
    Salut tt le monde,
    J'ai une application sous forme d'une interface graphique (JFrame) à partir du quelle je vais appeler un autre proramme, je veux bien que mon application appelante ne sera accéssible qu'aprés la terminaison de l'exécution du programme appelé, j'ai mis ce code pour tester:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    try
                     {           
                      thisClass.setEnabled(false);
                      Runtime rt = Runtime.getRuntime();
                              String cmd = new String("C:/Documents and Settings/pfe/Mes documents/ccm-2.0.7.exe");
                         Process proc = rt.exec(cmd);
                         thisClass.setEnabled(true);
                     } catch (Throwable t)
                       {
                         t.printStackTrace();
                       }
    Mais ça n'a rien ajouté, l'application appelée ce lance (dans l'exemple c'est le programme d'installation de ccm), et lorsque je clique sur l'interface de mon application appelante elle est activée et le programme appelé passe en arriére plan!!!
    Cooment faire?

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


    Il suffit d'utiliser waitFor() pour attendre la fin du process.
    De plus je te conseille toujours de fermer tous les flux d'entrées/sorties si tu ne les utilises pas, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    		Runtime rt = Runtime.getRuntime();
    		String cmd = new String(
    				"C:/Documents and Settings/pfe/Mes documents/ccm-2.0.7.exe");
    		Process proc = rt.exec(cmd);
    		proc.getInputStream().close();
    		proc.getOutputStream().close();
    		proc.getErrorStream().close();
     
    		proc.waitFor();

    Enfin, puisqu'il s'agit d'une application graphique, essaye de ne pas faire cela dans l'EDT sous peine de bloquer ta GUI...

    a++

  3. #3
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 8
    Par défaut
    Merci pour l'aide, mais votre modification ne répond pas à mon besoin, en fait c'est vrai qu'elle bloque l'interface graphique du programme appelant mais lorsque je clique sur cette derniere elle passe en avant et le programme appelé passe en arriere plan, ce que je veux c'est d'avoir le même comportement que celui utilisé avec JOptionPane.showMessageDialog lorsqu'un programme fait appel à JOptionPane.showMessageDialog il sera inaccéssible jusqu'a la terminaison du travail de JOptionPane.showMessageDialog par l'appuis sur un bouton OK ou Cancel ou autre.

  4. #4
    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
    Je ne pense pas que cela soit possible entre deux applications distinctes...

    [edit] Pourquoi ne pas simplement cacher la fenêtre de l'application ?

    a++

  5. #5
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 8
    Par défaut
    Je vais utiliser l'interface graphique comme un editeur de workflow designer, lorsque je double clique sur un element de cet editeur il doit exécuter une application relative à cet element (externe à mon programme d'édition afin de rarantir l'extensibilité), cette application est charger d'interferer avec l'utilisateur pour collecter les paramétre de cet element, en ce moment là, je veux que l'interface graphique de l'editeur reste visible mais inaccessible jusqu'à la terminaison de l'opération de collecte des paramétres.

Discussions similaires

  1. Réponses: 0
    Dernier message: 03/02/2010, 12h13
  2. [XL-97] UserForm : comment ne pas bloquer le code appelant?
    Par Penegal dans le forum Macros et VBA Excel
    Réponses: 31
    Dernier message: 17/04/2009, 15h35
  3. [Runtime,exec] Comment faire un pipe unix dans le exec ?
    Par Escuzze dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 06/03/2008, 12h48
  4. Réponses: 23
    Dernier message: 30/06/2007, 18h14
  5. Réponses: 3
    Dernier message: 07/11/2005, 17h33

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