所以我非常接近我的目的,我无法弄清楚为什么它这样做。也许是因为我编码了一段时间后才愚蠢。然而。所以我有两个文件应该允许我的程序。第一个是MP3,另一个是Wav。我让他们上班。我的意思是,如果我选择Wav文件,声音来了,如果我选择它的工作,所以没有问题,但问题是现在是按下打开( - >浏览文件),然后按播放声音应该来了,是的。所以当我打开另一个文件例如一首新歌时。然后按播放。这首歌正在播放第一首歌曲,同时让它成为两首曲目,我想让它制作 - >当一首歌正在播放时播放。如果我选择新歌并按下播放,那么第一首歌就应该消失。我觉得我很接近,但是。不过我已经做到了这个
static boolean status = true;
btnPlay.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (e.getSource() == btnPlay) {
if(!status) {
clip.start();
lblPlaying.setText("Enjoy the music!");
} else if(status == true) {
mp3_player.play();
lblPlaying.setText("Enjoy the music!");
}
}
}
});
public void Choose() throws IOException {
String userDir = System.getProperty("user.home");
JFileChooser fileChooser = new JFileChooser(userDir +"/Desktop");
int returnValue = fileChooser.showOpenDialog(null);
if (returnValue == JFileChooser.APPROVE_OPTION) {
File selectedFile = fileChooser.getSelectedFile();
System.out.println(selectedFile.getName());
String ext = selectedFile.getPath();
if(ext.endsWith(".mp3")) { // For mp3
status = true;
mp3_player = new MP3Player(selectedFile);
lblPlayURL.setText(selectedFile.getName());
}
else if(ext.endsWith(".wav")) {
status = false; //For .Wav
try {
AudioInputStream stream;
AudioFormat format;
DataLine.Info info;
clip = clip;
stream = AudioSystem.getAudioInputStream(selectedFile);
format = stream.getFormat();
info = new DataLine.Info(Clip.class, format);
clip = (Clip) AudioSystem.getLine(info);
clip.open(stream);
lblPlayURL.setText(selectedFile.getName());
}
catch(Exception e) {
//whatevers
}
}
}
}
}
为了缩短故事,我所做的就是将变量设置为boolean为false。所以只要False运行就需要Wav。什么时候真的它的MP3。但正如我所说。问题就在于。
我做布尔有什么问题吗?
编辑:忘记添加打开按钮:
btnOpen.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(e.getSource() == btnOpen) {
try {
Choose();
}
catch (IOException e1) {
e1.printStackTrace();
}
}
}
});
}
编辑:停止方法 ,
btnStop.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(e.getSource() == btnStop) {
if(!status) {
clip.stop();
lblPlaying.setText("Nothing plays right now!");
} else if(status == true) {
mp3_player.stop();
lblPlaying.setText("Nothing plays right now!");
}
}
}
});
答案 0 :(得分:1)
你需要有另一面旗帜告诉你它是否正在播放。然后在你开始播放歌曲之前,检查标志,然后停止任何音乐,如果它是真的,然后开始新的。
你本质上有一个设计缺陷。该系统能够一次播放多首歌曲,它不知道你想要阻止其中一首歌曲。