我这里有一个监听用户输入的代码。
System.out.println(message);{
if(message.equals("play")){
try {
AudioInputStream inputStream = AudioSystem.getAudioInputStream(new File("c:/DancingMachupapet/Test.wav"));
Clip clip = AudioSystem.getClip();
// getAudioInputStream() also accepts a File or InputStream
clip.open(inputStream);
clip.start();
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JOptionPane.showMessageDialog(null, "Close to exit!");
}
});
}catch (IOException e) {
}
}
if(message.equals("hoy")){
try {
AudioInputStream inputStream = AudioSystem.getAudioInputStream(new File("c:/DancingMachupapet/ThinkOfManu.wav"));
Clip clip = AudioSystem.getClip();
// getAudioInputStream() also accepts a File or InputStream
clip.open(inputStream);
clip.start();
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JOptionPane.showMessageDialog(null, "Close to exit!");
}
});
}catch (IOException e) {
}
}
}
当代码看到消息'hoy'和'play'时,它会分别播放'ThinkOfManu.wav'和'Test.wav'。它有效但我的问题是当我同时输入'hoy'和'play'时,2个wav文件同时播放。
我想要发生的是当ThinkOfManu.wav正在播放并且我调用Test.wav时,ThinkOfManu应该停止并播放Test.wav。不是同时的。
请在这里帮助我。
答案 0 :(得分:1)
我假设Clip.stop方法确实存在?
每次运行新歌时,您都在创建一个新的剪辑对象。 不要这样做,而是在try-catch块之外,并在触发之前初始化剪辑对象 clip.play(),做一个clip.stop。
那应该适合你。
示例代码:
Clip clip = AudioSystem.getClip();
if(message.equals("play"))
{
try {
AudioInputStream inputStream = AudioSystem.getAudioInputStream(new File("c:/DancingMachupapet/Test.wav"));
clip.stop();
clip.open(inputStream);
clip.start();
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JOptionPane.showMessageDialog(null, "Close to exit!");
}});
}catch (IOException e) {
}
}
if(message.equals("hoy")){
try {
AudioInputStream inputStream = AudioSystem.getAudioInputStream(new File("c:/DancingMachupapet/ThinkOfManu.wav"));
clip.open(inputStream);
clip.start();
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JOptionPane.showMessageDialog(null, "Close to exit!");
}
});
}catch (IOException e) {
}
}
}