【问题标题】:Java Jlayer Mp3 Player - how to repeat and stop song [closed]Java Jlayer Mp3 Player - 如何重复和停止歌曲[关闭]
【发布时间】:2013-06-06 14:39:11
【问题描述】:

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】:

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

    希望这会有所帮助。

    【讨论】:

    • 对不起,我没有谢谢你。它真的帮助了我很多感谢:))
    猜你喜欢
    • 2012-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-19
    • 2012-07-20
    • 1970-01-01
    • 2011-10-31
    相关资源
    最近更新 更多