在Java中播放.wav

在Java中播放.wav,java,audio,wav,Java,Audio,Wav,我知道,另一个。问题是,我已经查遍了我能找到的每一条线索,这个问题仍然存在——我没有发现任何错误,我的耳机“砰砰”地响起来,好像它们要播放声音,但什么都不播放。程序终止前会有一个延迟,但我不知道这是什么指示还是Java关闭 import java.io.File; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; import javax.sound.sampled.Clip;

我知道,另一个。问题是,我已经查遍了我能找到的每一条线索,这个问题仍然存在——我没有发现任何错误,我的耳机“砰砰”地响起来,好像它们要播放声音,但什么都不播放。程序终止前会有一个延迟,但我不知道这是什么指示还是Java关闭

import java.io.File;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;

public class Main {
    public static void main(String[] args) {
        try{
//          AudioInputStream ais = AudioSystem.getAudioInputStream(Main.class.getResource("bells.wav"));
            AudioInputStream ais = AudioSystem.getAudioInputStream(new File("bells.wav"));
            Clip test = AudioSystem.getClip();
            test.open(ais);
            test.start();
            test.drain();
            test.close();
        }catch(Exception ex){
            ex.printStackTrace();
        }
    }
}
编辑:现在工作代码:

import java.io.File;
import javax.sound.sampled.*;

public class Main {
    public static void main(String[] args) {        
        try{
            AudioInputStream ais = AudioSystem.getAudioInputStream(new File("bells.wav"));
            Clip test = AudioSystem.getClip();  

            test.open(ais);
            test.start();

            while (!test.isRunning())
                Thread.sleep(10);
            while (test.isRunning())
                Thread.sleep(10);

            test.close();
        }catch(Exception ex){
            ex.printStackTrace();
        }
    }
}

@gpasch我做了,是的,试过有没有。谢谢。另外@gpasch,为了记录在案,官方文档在示例末尾使用了clip.close()。对于任何感兴趣的人,下面第三个答案的脚注解决了这个问题:-问题是clip.drain();线程阻塞不是应该的。我已经用我的(现在正在使用的)代码更新了主要帖子,以备将来参考。正如下面的评论所说,你不应该像答案所建议的那样旋转。而且,在已经有主线程的普通应用程序中,这也不会是一个问题。显示
LineListener
的其他示例要好得多<代码>LineListener将在剪辑完成时告诉您。不过,我很高兴你发现了这个问题。