あなたのコードは、ブロックからコードを再生しようとすべきではありませんcatch
.1つには、例外が生成された場合にのみ呼び出されます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 に関する注意事項などは知りません)。