Ваш код должен НЕ пытаться воспроизвести код из блока 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 и т. Д.).