import java.io.IOException;
import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.FactoryRegistry;
import javazoom.jl.player.advanced.AdvancedPlayer;
import javazoom.jl.player.advanced.PlaybackEvent;
import javazoom.jl.player.advanced.PlaybackListener;

public class SoundJLayer extends PlaybackListener implements Runnable {

    private String filePath;
    private AdvancedPlayer player;

    public SoundJLayer(String filePath) {
        this.filePath = filePath;
    }

    public void play() {
        try {
            player = new AdvancedPlayer(new java.net.URL(filePath).openStream(),
                    FactoryRegistry.systemRegistry().createAudioDevice());
            player.setPlayBackListener(this);
            new Thread(this, "AudioPlayerThread").start();
        } catch (IOException | JavaLayerException ex) {
            ex.printStackTrace();
        }
    }

    public void playbackStarted(PlaybackEvent playbackEvent) {
        System.out.println("Music is started ..");
    }

    public void playbackFinished(PlaybackEvent playbackEvent) {
        System.out.println("Music is finished !");
    }

    public void run() {
        try {
            player.play();
        } catch (JavaLayerException ex) {
            ex.printStackTrace();
        }
    }

    public static void main(String args[]) {
        SoundJLayer soundToPlay = new SoundJLayer("file:///D:/musicFile.mp3");
        soundToPlay.play();
    }
}