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

avec Java Discussion :

un thread qui ne s'arrete pas.


Sujet :

avec Java

  1. #1
    Membre actif Avatar de turican2
    Profil pro
    Inscrit en
    Août 2006
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2006
    Messages : 257
    Points : 239
    Points
    239
    Par défaut un thread qui ne s'arrete pas.
    Bonsoir tout le monde,

    j'ai donc un souci avec un thread récalcitrant et votre aide serait la bien venu.

    le main:
    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
     
    import java.io.IOException;
     
    public class Main {
     
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) throws IOException {
            // TODO code application logic here
            Thread t = new Thread(new mplayer());
            t.start();      
            t.stop();
        }
    }
    et la class mplayer
    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
     
    import java.io.IOException;
    import java.util.logging.Level;
    import java.util.logging.Logger;
     
    public class mplayer  implements Runnable  {
     
        private  String cmd ="C:\\Program Files\\MPlayer for Windows\\mplayer\\mplayer.exe -really-quiet -loop 0 -fixed-vo  -playlist  E:\\videoJava\\playlist.m3u";
        private  Runtime r;
        private  Process p;
     
        public mplayer() throws IOException{
            r = Runtime.getRuntime();
        }
     
        public void run() {
            try {       
                p = r.exec(cmd);
            } catch (IOException ex) {
                Logger.getLogger(mplayer.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
    En mode pas à pas, je constate bien que mon mplayer se lance avec un loop -0 afin qu'il boucle à l'infini. Néanmoins, je m'attendais lors du t.stop() à voir mplayer s'arrêter ce qui n'est pas le cas (je constate bien que la javadoc considère cette ligne comme deprecated). Je ne sais donc pas comment m'y prendre pour stopper mplayer !!! Auriez vous une idée?

    Merci
    "La connaissance s'accroît quand on la partage."(Socrate)

    Si vous trouvez vous même la solution au POST que vous venez de poser, indiquez nous comment vous avez fait

  2. #2
    Expert confirmé
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut
    interrupt() te convient pas ?

  3. #3
    Membre actif Avatar de turican2
    Profil pro
    Inscrit en
    Août 2006
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2006
    Messages : 257
    Points : 239
    Points
    239
    Par défaut
    la méthode interrupte() ne fonctionne pas non plus. En faite mon raisonnement ne doit pas être le bon, car la javadoc semble dire que ce sont les bonnes méthodes.
    "La connaissance s'accroît quand on la partage."(Socrate)

    Si vous trouvez vous même la solution au POST que vous venez de poser, indiquez nous comment vous avez fait

  4. #4
    Expert confirmé
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut
    Citation Envoyé par turican2 Voir le message
    la méthode interrupte() ne fonctionne pas non plus. En faite mon raisonnement ne doit pas être le bon, car la javadoc semble dire que ce sont les bonnes méthodes.
    je voulu dire méttre interrupt() a la fin de run()

  5. #5
    Membre actif Avatar de turican2
    Profil pro
    Inscrit en
    Août 2006
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2006
    Messages : 257
    Points : 239
    Points
    239
    Par défaut
    Le but aurait été d'arrêter le thread à ma demande un peu plus tard dans le programme et non à la fin du run().
    "La connaissance s'accroît quand on la partage."(Socrate)

    Si vous trouvez vous même la solution au POST que vous venez de poser, indiquez nous comment vous avez fait

  6. #6
    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
    deux chose

    d'abord stop est déprécié pour une bonne raison, donc ne l'utilise surtout pas. Ensuite, ton thread est déjà arrêté au moment de l'appel dans 99% des cas, car tout ce que fait ton thread c'est lancer mplayer puis quitter run(). Si tu veux stopper mplayer, il suffit de faire ca.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
        public static void main(String[] args) throws IOException {
            String cmd ="C:\\Program Files\\MPlayer for Windows\\mplayer\\mplayer.exe -really-quiet -loop 0 -fixed-vo  -playlist  E:\\videoJava\\playlist.m3u";
     try {       
                Process p = Runtime.getRuntime().exec(cmd);
                p.getInputStream().close();
                p.getOutputStream().close();
                p.getErrorStream().close();
                Thread.sleep(5000); // 5 secondes pour le test ;)
                p.destroy();
            } catch (IOException ex) {
                Logger.getLogger(mplayer.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    Tu notera qu'il n'y a pas nécessité de faire de thread pour cela

  7. #7
    Membre actif Avatar de turican2
    Profil pro
    Inscrit en
    Août 2006
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2006
    Messages : 257
    Points : 239
    Points
    239
    Par défaut
    Je dois être maudit avec Java . Je teste sur mon PC et ça ne fonctionne pas. Mplayer ne s'arrête pas et continue de dérouler sa playlist en boucle.

    En revanche, je viens de tester ce code avec notepad.exe et là no souci.. ralala ... je vais changer de player
    "La connaissance s'accroît quand on la partage."(Socrate)

    Si vous trouvez vous même la solution au POST que vous venez de poser, indiquez nous comment vous avez fait

  8. #8
    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
    si mplayer lit la console texte, envoyer 'q' dans son inputstream pourrais faire l'affaire

  9. #9
    Membre actif Avatar de turican2
    Profil pro
    Inscrit en
    Août 2006
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2006
    Messages : 257
    Points : 239
    Points
    239
    Par défaut
    j'ai donc cherché à faire ce que tu me dis en lisant les tuto sur les i/O

    je n'arrive pas a envoyer de caractère vers mplayer. Plus génant, j'ai essayé d'envoyer des caractères vers notepad avec ce code mais il ne fonctionne pas non plus.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     String cmd ="notepad.exe";
     try {
                Process p = Runtime.getRuntime().exec(cmd);
                OutputStream out = p.getOutputStream();
                out.write("q".getBytes());
                out.close();
                out.flush();
                Thread.sleep(5000); // 5 secondes pour le test ;)
                p.destroy();
            } 
    catch (IOException ex) {
                Logger.getLogger(mplayer.class.getName()).log(Level.SEVERE, null, ex);
    }
    "La connaissance s'accroît quand on la partage."(Socrate)

    Si vous trouvez vous même la solution au POST que vous venez de poser, indiquez nous comment vous avez fait

  10. #10
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par turican2 Voir le message
    je n'arrive pas a envoyer de caractère vers mplayer. Plus génant, j'ai essayé d'envoyer des caractères vers notepad avec ce code mais il ne fonctionne pas non plus.
    Les applications graphiques n'utilisent pas forcément les flux d'E/S standard... et en particulier les applications Windows !

    a++

  11. #11
    Membre actif Avatar de turican2
    Profil pro
    Inscrit en
    Août 2006
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2006
    Messages : 257
    Points : 239
    Points
    239
    Par défaut
    bon donc mplayer est un vrai méchant comme il ne devrait pas se faire.

    Pour une application standard (enfin qui reagit comme l'annonce la javadoc)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     String cmd ="notepad.exe";
     try {
                final Process p = Runtime.getRuntime().exec(cmd);
                p.destroy();
    }
    catch (IOException ex) {
                //Logger.getLogger(mplayer.class.getName()).log(Level.SEVERE, null, ex);
    }
    pour mplayer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     String cmd ="C:\\Program Files\\MPlayer for Windows\\mplayer\\mplayer.exe -really-quiet -loop 0 -fixed-vo -slave -playlist  E:\\videoJava\\playlist.m3u";
     
    try{
                final Process p = Runtime.getRuntime().exec(cmd);
                PrintStream s = new PrintStream(p.getOutputStream());
                s.print("quit\n");
                s.flush();
                p.destroy(); //éventuellement inutile car le thread se termine.
    }catch (IOException ex) {
                Logger.getLogger(mplayer.class.getName()).log(Level.SEVERE, null, ex);
    }
    le -slave permet a JAVA d'arreter/controler l'application sinon ça ne fonctionne pas du tout et sans message d'erreur.

    Je ne comprends pas comment c'est possible mais bon le resultat escompté est là voilà

    merci à tout ceux qui m'ont orienté.
    "La connaissance s'accroît quand on la partage."(Socrate)

    Si vous trouvez vous même la solution au POST que vous venez de poser, indiquez nous comment vous avez fait

  12. #12
    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 turican2 Voir le message
    le -slave permet a JAVA d'arreter/controler l'application sinon ça ne fonctionne pas du tout et sans message d'erreur.

    Je ne comprends pas comment c'est possible mais bon le resultat escompté est là voilà

    merci à tout ceux qui m'ont orienté.
    Probablement que, à la base, tu kill le process de control mplayer mais que celui-ci a lancé un nouveau process pour la partie lecture de la video. Il faudrait voir son fonctionnement interne, mais ce qui est sur, ce n'est pas parce que tu kill ton process que les process démarré à partir de celui-ci seront fermés. Donc si mplayer crée un process "lecture video" tu n'aura pas de controle sur ce dernier. Tant que t'as trouvé quelque chose qui merche c'est le principal

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

Discussions similaires

  1. Thread qui ne se lance pas
    Par davels dans le forum Langage
    Réponses: 6
    Dernier message: 04/12/2007, 18h05
  2. boucle while qui ne s'arrete pas à la lecture d'un zero
    Par malikoo dans le forum Général Python
    Réponses: 14
    Dernier message: 04/07/2007, 10h48
  3. Boucle qui ne s'arrete pas
    Par pierrot67 dans le forum Bases de données
    Réponses: 4
    Dernier message: 29/03/2007, 10h19
  4. Thread qui ne se lance pas
    Par barbiche dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 20/03/2007, 16h06
  5. [wxPython] Application qui ne s'arrete pas....
    Par Mr Hyde dans le forum wxPython
    Réponses: 9
    Dernier message: 10/11/2005, 16h28

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