我对mp 3播放器有问题。我正在使用jLayer。 这是我的代码
private void formWindowOpened(java.awt.event.WindowEvent evt) {
new Thread (){
public void run(){
try
{
Player prehravac;
FileInputStream buff = new FileInputStream(Okno.filename);
prehravac = new Player(buff);
prehravac.play();
if (prehravac != null)
{
prehravac.play();
}
}
catch(Exception e)
{
}
}
}.start();
}
在我的应用程序中,我需要从头到尾播放歌曲。所以当歌曲结束时我需要再次启动它,当窗口关闭时我想要停止这首歌......
答案 0 :(得分:3)
JLayer不支持连续播放,因此您必须使用循环在旧播放器完成后重复启动新播放器。例如:
try
{
do
{
FileInputStream buff = new FileInputStream(Okno.filename);
prehravac = new AdvancedPlayer(buff );
prehravac .play();
}while(loop);
}
catch(Exception ioe)
{
//TODO error handling
}
将循环作为布尔值,您可以在不同的方法中设置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();
}
}
有了这个,您可以随时随地创建Thread:
private MyAudioPlayer thePlayer;
[... some class code here...]
public void yourMethod(){
thePlayer = new MyAudioPlayer("path of the music file", true);
thePlayer.start();
}
如果你想在某个时候摆脱它,请致电thePlayer.close();
请注意,thePlayer应该是一个实例变量,因此您可以再次重用它。如果只在方法中声明它,它将在方法完成后消失。
希望这有帮助。