J2me播放器,一个接一个播放MP3文件

时间:2011-09-19 19:20:54

标签: java java-me media-player mmapi

我无法一个接一个地播放MP3文件,当1个文件播放完另一个文件需要启动时。我只能开始播放1个文件,当我把代码放到下一个文件时,它什么也没做。由于某些原因,我不能在文件的持续时间内使用thread.sleep()。还有其他办法吗?

//this is the basic code..
playq(String fname){
pl =  Manager.createPlayer(stream,"audio/mpeg");
pl.realize();

pl.prefetch();

pl.start();

// what should i use here?? pls i don't want to use thread.sleep..
playagain(fname);
}
void playagain(String fname){
        try {

    pl.stop();
    pl.deallocate();
   pl.close();

} catch (Exception ex) {}
 //change file name and stream and..
        playq(mp3f);
    }

1 个答案:

答案 0 :(得分:2)

您的代码应 NOT 尝试播放来自catch块的代码 - 首先,它只会被称为生成异常(您通常也不应该追求一揽子Exception - 使用更具体的内容。

您确定无法使用Thread.sleep()吗?无论如何你都不会想要(例如,如果用户可以暂停剪辑......)。

相反,请查看使用PlayerListener界面,并聆听END_OF_MEDIA个事件。

一个非常基本的(例如,这个没有经过测试,除此之外还需要更多工作)示例:

public class PlayerRunner implements PlayerListener {

    private final String[] songFiles;
    private int songIndex = 0;

    public PlayerRunner(String[] songs) {
        this.songFiles = songs;
    }

    public void start() {
        playerUpdate(null, null, null);
    }

    // This method is required by the PlayerListener interface
    public void playerUpdate(Player player, String event, Object eventData) {
        // The first time through all parameters will be blank/null...
        boolean nextSong = (event == null);
        if (event == PlayerListener.END_OF_MEDIA) {
            player.stop();
            player.dallocate();
            player.close();
            nextSong = index < songIndex.length;
        }

        if (nextSong) {
            String fileName = songFiles[index++];
            if (fileName != null) {
                Player pl = Manager.createPlayer(fileName, "audio/mpeg");
                pl.addPlayerListener(this);
                pl.realize();
                pl.prefetch();
                pl.start();
            }
        }
    }
}

请注意,我没有完全正确地做到这一点 - 例如,我没有做异常处理。另外,在不了解您的情况的情况下,我不知道还有什么需要担心的事情。这应该是一个简单的答案,让你开始看看你应该去哪里。

(另外,我从未使用过JME的媒体播放器,因此我不知道有关GC的任何警告,等等。)