Java Jlayer Mp3 Player - comment répéter et arrêter la chanson


Je suis désolé pour mon mauvais anglais :) J'ai un problème avec le lecteur mp 3. Je suis en utilisant jLayer. Ceci est mon code

private void formWindowOpened(java.awt.event.WindowEvent evt) {                                  

new Thread (){
  public void run(){  
          try
{

Player prehravac;
 FileInputStream buff = new FileInputStream(Okno.filename);
            prehravac = new Player(buff);
            prehravac.play();
            if (prehravac != null)
            {
                prehravac.play();
            }
            }
catch(Exception e)
        {

        } 
         }

}.start();
 }  

Dans mon application, j'ai besoin de jouer une chanson du début à la fin. Donc, quand la chanson se termine, je dois la redémarrer et quand la fenêtre se ferme, je veux arrêter cette chanson...

Quelqu'un Peut-il m'aider s'il vous plaît ? :) Je suis en train de le faire pour les 2 jours... Je ne sais pas comment arrêter quelque chose dans un fil différent... Merci pour votre aide :)

Author: CPU 100, 2013-06-11

1 answers

JLayer ne prend pas en charge la lecture continue, vous devez donc utiliser une boucle pour démarrer à plusieurs reprises un nouveau joueur après la fin de l'ancien. Par exemple:

try { do { FileInputStream buff = new FileInputStream(Okno.filename); prehravac = new AdvancedPlayer(buff ); prehravac .play(); }while(loop); } catch(Exception ioe) { //TODO error handling }

Avec loop étant un booléen, vous pouvez définir true ou false dans une méthode différente selon que vous voulez qu'il soit joué une seule fois ou plusieurs fois.

Si vous souhaitez accéder au thread plus tard, vous devez au moins le déclarer à une variable. Encore mieux est d'écrire une classe séparée qui étend thread. Ce faisant, vous pouvez ajouter méthode au thread que vous pouvez appeler plus tard.

Pour votre code, cela pourrait ressembler à ceci:

import java.io.*;
import javazoom.jl.player.*;

public class MyAudioPlayer extends Thread {

    private String fileLocation;
    private boolean loop;
    private Player prehravac;

    public MyAudioPlayer(String fileLocation, boolean loop) {
        this.fileLocation = fileLocation;
        this.loop = loop;
    }

    public void run() {

        try {
            do {
                FileInputStream buff = new FileInputStream(fileLocation);
                prehravac = new Player(buff);
                prehravac.play();
            } while (loop);
        } catch (Exception ioe) {
            // TODO error handling
        }
    }

    public void close(){
        loop = false;
        prehravac.close();
        this.interrupt();
    }
}

Avec cela, vous pouvez simplement créer le Thread quand et où vous voulez, comme ceci:

private MyAudioPlayer thePlayer;

    [... some class code here...]

    public void yourMethod(){
        thePlayer = new MyAudioPlayer("path of the music file", true);
        thePlayer.start();
    }

Et si vous voulez vous en débarrasser à un moment donné, appelez thePlayer.close(); Notez que thePlayer doit être une variable d'instance afin que vous puissiez la réutiliser à nouveau. Si vous le déclarez uniquement dans une méthode, il disparaîtra une fois la méthode terminée.

J'espère que cela aide.

 3
Author: Akunosh, 2016-07-20 12:22:44