Java Jlayer Mp3 Player - как повторить и остановить песню

Я извиняюсь за мой плохой английский:) У меня проблема с mp 3 игроком. Я использую jLayer. Это мой код

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();
 }  

В моем приложении мне нужно играть песню от начала до конца. Поэтому, когда песня заканчивается, мне нужно запустить ее снова, а когда окно закроется, я хочу остановить эту песню...

Может кто-нибудь помочь мне с этим, пожалуйста?:) Я пытаюсь сделать это в течение 2 дней... Я не знаю, как остановить что-то в другой теме... Спасибо за вашу помощь:)

1 ответ

JLayer не поддерживает непрерывное воспроизведение, поэтому вы должны использовать цикл, чтобы повторно запустить нового игрока после того, как старый закончится. Например:

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

с булевым циклом, вы можете установить true или false другим способом, в зависимости от того, хотите ли вы, чтобы он воспроизводился один или несколько раз.

Если вы хотите получить доступ к потоку позже, вы должны по крайней мере объявить его переменной. Еще лучше написать отдельный класс, который расширяет поток. Таким образом, вы можете добавить метод в поток, который позже сможете вызвать.

Для вашего кода это может выглядеть примерно так:

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();
    }
}

При этом вы можете просто создать поток, когда и где вы хотите, как это:

private MyAudioPlayer thePlayer;

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

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

и если вы хотите избавиться от него в какой-то момент вызова thePlayer.close();Обратите внимание, что thePlayer должен быть переменной экземпляра, чтобы вы могли использовать его снова. Если вы объявите его только в методе, он исчезнет после завершения метода.

Надеюсь это поможет.

Другие вопросы по тегам