Java:多次播放声音

Java:多次播放声音,java,audio,Java,Audio,我最近一直在学习如何在java中添加声音。目前,我有这个代码可以工作,但它并不总是在正确的时间播放,有时甚至根本不播放。每次在正确的时间触发play()方法时,如何让声音播放?顺便说一下,每次我在组件上单击时都会发生这种情况 public class Sound { private File sndFile0; private AudioInputStream au; private Clip cl; private DataLine.Info info;

我最近一直在学习如何在java中添加声音。目前,我有这个代码可以工作,但它并不总是在正确的时间播放,有时甚至根本不播放。每次在正确的时间触发
play()
方法时,如何让声音播放?顺便说一下,每次我在
组件上单击
时都会发生这种情况

public class Sound {

    private File sndFile0;
    private AudioInputStream au;
    private Clip cl;
    private DataLine.Info info;

    public Sound() {
        try {
            sndFile0 = new File(getClass().getResource("/sound/vir1.wav").toURI());
            au = AudioSystem.getAudioInputStream(sndFile0);
            info = new DataLine.Info(Clip.class, au.getFormat());
            cl = (Clip) AudioSystem.getLine(info);
            cl.open(au);
        } catch (UnsupportedAudioFileException | IOException | LineUnavailableException | URISyntaxException e) {
            e.printStackTrace();
        }
    }

    public void play() {
        cl.start();
        cl.setFramePosition(0);
    }
}

解决了。我所做的是每次单击组件时都继续加载声音文件。

只需在Type.STOP上重新启动即可@迈克尔。这是奇怪的,如果我点击组件足够快或剪辑结束后,声音会重新启动,否则,如果它在某个中间,它不会做任何事情。我将播放代码更改为:如果它已经在播放,您想重新启动它吗?这是一个停止()重置()和一个播放()等等。。。不确定在一些测试之后,我发现
LineListener
没有做任何事情,唯一允许声音播放不止一次的是
cl.setFramePosition(0)
,它有时会起作用。我甚至在播放方法开始时尝试过使用
cl.stop
,但毫无帮助。所以基本上它把我带回了我原来的
play()
method.SOLVED(ish)。我能让它做的是,每次他们点击组件时,它都会重新加载文件。这是重复播放声音的唯一方法吗?这可能是不太合适的方法。我不建议这样做。第三方库可能更合适。这种方法适用于我,直到我有很多连续的声音(自动枪声),然后我得到一个内存崩溃。