【发布时间】:2017-02-16 18:57:14
【问题描述】:
所以我正在尝试创建一个音乐播放器小部件,但一次播放多首选定的歌曲时遇到问题。我希望增强的 for 循环会遍历所有选定的文件并一次播放一个,但它会同时播放所有歌曲。有没有更好的方法来完成这项工作?
FileInputStream FIS;
BufferedInputStream BIS;
public Player player;
public long pauseLocation;
public long songTotalLength;
public boolean playState = false;
public String fileLocation;
public boolean playState(){
return playState;
}
public void setPlayState(boolean value){
this.playState = value;
}
public void select() {
FileNameExtensionFilter filter = new FileNameExtensionFilter("MP3 Files", "mp3", "mpeg3");
JFileChooser chooser = new JFileChooser("D:\\MAIN_DIV\\Music");
chooser.addChoosableFileFilter(filter);
chooser.setMultiSelectionEnabled(true);
int returnVal = chooser.showOpenDialog(null);
if (returnVal == JFileChooser.APPROVE_OPTION) {
stop();
if (playState == false) {
File[] selectedFile = chooser.getSelectedFiles();
for (File x : selectedFile) {
String song = x + "";
String name = chooser.getSelectedFile().getName();
display.setText(name);
play(song);
}
}
}
}
public void play(String path){
playState();
try {
FIS = new FileInputStream(path);
BIS = new BufferedInputStream(FIS);
player = new Player(BIS);
songTotalLength = FIS.available();
fileLocation = path + "";
//System.out.println(path);
} catch (FileNotFoundException | JavaLayerException ex) {
} catch (IOException ex) {
}
new Thread (){
@Override
public void run(){
if(playState == false){
try {
player.play(); //play from start or resume
if (player.isComplete() && MusicPlayer.count==1){
play(fileLocation);
}
if (player.isComplete()){
MusicPlayer.display.setText("");
}
} catch (JavaLayerException ex) {
}
}
}
}.start();
setPlayState(false);
}
【问题讨论】:
-
这样的for循环没有任何意义。问题是
play。从您的问题中不清楚 play 的作用,但它可能会创建一个后台进程来播放歌曲并在歌曲播放时返回,让循环继续播放新歌曲。如果您显示play的源代码,我们可能会为您提供帮助。另外:什么是播放列表?你不能在 for 循环之后运行播放列表吗? -
好的。这就是 play 的源代码。我从代码中删除了播放列表类(仍在处理中)。也许现在我可以得到更多帮助
-
我希望只有在播放方法完成一首歌曲后才能继续循环