JLayer不支持连续播放,因此您必须使用循环来在旧播放器播放完毕后重复启动新播放器.例如:
尝试
????????{
????????????做
????????????{
????????????????FileInputStream buff =新的FileInputStream(Okno.filename);
????????????????prehravac =新的AdvancedPlayer(buff);
????????????????prehravac .play();
????????????}而(循环);
????????}
????????catch(异常ioe)
????????{
????????????// TODO错误处理
????????}
如果loop是一个布尔值,则可以根据是否要播放一次或重复播放来用其他方法设置true或false.
如果以后要访问该线程,则至少应将其声明为变量.更好的是编写一个单独的类来扩展线程.这样,您可以将方法添加到以后可以调用的线程中.
对于您的代码,它可能看起来像这样:
import java.io.*;
import javazoom.jl.player.*;
public class MyAudioPlayer extends Thread {
private String fileLocation;
private boolean loop;
private Player prehravac;
public MyAudioPlayer(String fileLocation, boolean loop) {
this.fileLocation = fileLocation;
this.loop = loop;
}
public void run() {
try {
do {
FileInputStream buff = new FileInputStream(fileLocation);
prehravac = new Player(buff);
prehravac.play();
} while (loop);
} catch (Exception ioe) {
// TODO error handling
}
}
public void close(){
loop = false;
prehravac.close();
this.interrupt();
}
}
这样,您可以像这样在任何时间和地点轻松创建线程:
private MyAudioPlayer thePlayer;
[... some class code here...]
public void yourMethod(){
thePlayer = new MyAudioPlayer("path of the music file", true);
thePlayer.start();
}
如果您想摆脱它,请调用thePlayer.close();.
请注意,Player应该是一个实例变量,因此您可以再次重用它.如果仅在方法中声明它,则该方法完成后将消失.
希望这可以帮助.