我正在使用声音播放器而我正在尝试创建一个while循环,它知道何时终止它正在播放的JFrame
。while循环应循环播放剪辑(录制)正在播放并在剪辑完成时结束。但是这里的交易是:while循环仅在打印出来时才有效,我不想让它做什么?
import java.io.*;
import java.net.URL;
import javax.sound.sampled.*;
import javax.swing.*;
public class SoundClipTest extends JFrame {
public SoundClipTest() {
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
try {
// Open an audio input stream.
File soundFile = new File("Testing/recording (2).wav");
AudioInputStream audioIn = AudioSystem.getAudioInputStream(soundFile);
//URL url = new URL("http://maximumdonline.com/miscwavs/pacman.wav");
//AudioInputStream audioIn = AudioSystem.getAudioInputStream(url);
// Get a sound clip resource.
Clip clip = AudioSystem.getClip();
// Open audio clip and load samples from the audio input stream.
clip.open(audioIn);
clip.start();
this.setVisible(true);
this.setVisible(false);
boolean run = true;
//problem While Loop
while(clip.isActive()){
//Only works when I print something out during the loop:
//System.out.println(run);
}
//Test While Loop has ended.
run = false;
System.out.println(run);
//Close JFrame
} catch (UnsupportedAudioFileException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (LineUnavailableException e) {
e.printStackTrace();
}
}
注意:大部分声音代码来自 https://www.ntu.edu.sg/home/ehchua/programming/java/J8c_PlayingSound.html 有用。我已经对它进行了测试,但我的while循环却在哭泣!
答案 0 :(得分:3)
正确处理此任务的方法是向LineListener
添加Clip
。 Clip
实现了javax.sound.sampled.Line
界面,因此我们可以使用Line.addLineListener(LineListener)
..
向此行添加侦听器。每当行的状态发生变化时,将使用描述更改的
update()
对象调用侦听器的LineEvent
方法。
答案 1 :(得分:-1)
尝试将代码修改为
while (clip.isActive()) {
if(!clip.isRunning())
clip.stop();
}
这对我来说很有把戏