Java Jlayer Mp3播放器 - 如何重复和停止歌曲[关闭]

问题描述 投票:1回答:1

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

在我的应用程序中,我需要从头到尾播放歌曲。所以当歌曲结束时我需要再次启动它,当窗口关闭时我想要停止这首歌......

java netbeans mp3 jlayer
1个回答
3
投票

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应该是一个实例变量,所以你可以再次重用它。如果只在方法中声明它,它将在方法完成后消失。

希望这可以帮助。

© www.soinside.com 2019 - 2024. All rights reserved.