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

Concurrence et multi-thread Java Discussion :

Mac OSX. La méthode WaitFor sur un Process est sans effet.


Sujet :

Concurrence et multi-thread Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    décembre 2009
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2009
    Messages : 247
    Points : 145
    Points
    145
    Par défaut Mac OSX. La méthode WaitFor sur un Process est sans effet.
    Bonjour,


    Environnement OSX sur MAC.

    je crée un Thread pour démarrer une application OSX et me mets en attente jusqu'à la fin du thread pour réveiller a tâche principale, cela n'a aucun effet, alors que sous Windows ça marche parfaitement.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ProcessBuilder pb =new ProcessBuilder("open", "-a", videoplayer , path  );
    Process process = pb.start();
    process.waitFor();
    J'ai essayé aussi avec la forme waitFor(3600,TIMEUNIT.SECONDS) mais cela n'a pas plus d'effet. Dès que le process a démarré, le thread se termine.
    Je recherche donc une solution.

    Merci pour toutes suggestions
    Gérard

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    septembre 2004
    Messages
    12 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2004
    Messages : 12 119
    Points : 20 532
    Points
    20 532
    Par défaut
    Hello,

    rien à voir avec waitFor() ni avec Java, c'est la commande open qui n'a aucun rapport entre Windows et MacOS. Le fait même qu'elle puisse être appelée et soit capable de lancer un autre programme sur les deux systèmes, n'est qu'une coïncidence sur laquelle tu es tombé.

    Pour résoudre le problème, n'utilise pas de commande open qui se termine tout de suite. Je répète, ça n'a rien à voir avec Java. Toi, tu as choisi de lancer une commande qui se termine tout de suite, et tu demandes à Java d'attendre qu'elle se termine, c'est à dire d'attendre et reprendre tout de suite. Du moins tu as choisi de faire ça sur MacOS et de faire autre chose sur Windows.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    décembre 2009
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2009
    Messages : 247
    Points : 145
    Points
    145
    Par défaut
    Bonjour,

    Merci de m'avoir répondu. En fait j'ai résolu mon problème, et cela peut être être utile à d'autres.

    l suffisait d'ajouter "th.join(1L) juste après le th.start(); lorsque cela tourne sous OSX.

    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
    38
    39
    40
    41
    42
    43
    44
     
                  String OS 	 = System.getProperty("os.name");
                  try {
    		th = new Thread() 
    		{
    		      public void run() 
    		      {
    		    	       System.out.println("Thread  running");
    			       jouer(path); 
    			       System.out.println("Thread stopped");
    			       Terminer.doClick();
    		      }
    		  };
    		  if (OS.startsWith("Mac ")) 
    		  {  
    			  th.start();
    			  th.join(1L);
    		  }
    		  else th.start();
    		  setVisible(true);
    		}
    		catch (Exception ex) {System.out.println(ex.toString());} 
            }
     
              public void jouer( String path() 
             {
    		    	 try {
                               ProcessBuilder pb=null;
                               if (! OS.startsWith("Mac "))     pb = new ProcessBuilder(videoplayer  , path  ); 
     
    			  else  pb =new ProcessBuilder("open", "-Wna", videoplayer , path  );
     
    			  pb.redirectErrorStream(true);
                              Vector feedback = new Vector();
    			  Process 	process = pb.start();
    		 	  BufferedReader stdout = new BufferedReader(new InputStreamReader(process.getInputStream()));
    		 	 String s="";
    		         while ((s = stdout.readLine()) != null) {feedback.add(s); }
    		 	 process.waitFor();
                      //	 for (int i=0; i<feedback.size(); i++)System.out.println(feedback.get(i));
     
    		}
    		catch (Exception ex){System.out.println("erreur de process :" + ex.toString());} 
       }

Discussions similaires

  1. Précisions sur la class Process et la méthode waitFor()
    Par Pierre.B dans le forum Général Java
    Réponses: 13
    Dernier message: 28/08/2009, 17h51
  2. où est /usr/local sur mac OSX server (10.4.10) ou quel est son équivalent?
    Par Khaled.Noordin dans le forum Développement OS X
    Réponses: 2
    Dernier message: 08/07/2007, 23h55
  3. Réponses: 4
    Dernier message: 31/05/2007, 15h33
  4. Installation de Apache 2.2.4 sur Mac OSX 10.4.9
    Par goldorax113 dans le forum Apache
    Réponses: 1
    Dernier message: 11/05/2007, 00h43
  5. GTK+ sur Mac OSX
    Par Invité dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 24/12/2006, 00h50

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