Проигрыватель J2me, воспроизведение файлов MP3 один за другим - PullRequest
2 голосов
/ 19 сентября 2011

Я не могу воспроизвести файл 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);
    }

1 Ответ

2 голосов
/ 20 сентября 2011

Ваш код должен НЕ пытаться воспроизвести код из блока catch - во-первых, он будет называться только если сгенерировано исключение (Вы также вообще не должны ловить одеяло Exception - используйте что-то более конкретное).

Вы уверены, что не можете использовать Thread.sleep()? Конечно, в любом случае вы не захотите (например, если пользователь может приостановить клип ...).

Вместо этого изучите использование интерфейса PlayerListener и прослушайте END_OF_MEDIA события.

A действительно базовый (как, например, это не проверено, и требует дополнительной работы) пример:

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 и т. Д.).

...