【问题标题】:J2me Player, Play MP3 Files One After The OtherJ2me Player,一个接一个地播放 MP3 文件
【发布时间】:2011-09-19 19:20:53
【问题描述】:

我无法一个接一个地播放 MP3 文件,当一个文件播放完另一个文件需要开始播放时。我只能开始播放 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);
    }

【问题讨论】:

    标签: java java-me media-player mmapi


    【解决方案1】:

    您的代码应该尝试从 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 的任何警告等)。

    【讨论】:

    • 你是如何在 Java ME 中使用 List&lt;String&gt; 的?
    • winces 我说我从来没有搞砸过 Java ME,这说明了。更改为使用数组列表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多