首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javax.sound.sampled它是如何工作的?

javax.sound.sampled它是如何工作的?
EN

Stack Overflow用户
提问于 2011-11-25 16:33:46
回答 1查看 665关注 0票数 1

我试着用Java播放一个声音。到目前为止一切都很顺利,谢谢,但我很难理解这是如何工作的。

我编写了一个函数,用于播放:

代码语言:javascript
复制
    private static void PlaySound(String path) {
        try {
            final File SoundFile = new File(path);
            AudioInputStream Sound = AudioSystem.getAudioInputStream(SoundFile);

            DataLine.Info info = new DataLine.Info(Clip.class, Sound.getFormat());
            Clip clip = (Clip) AudioSystem.getLine(info);
            clip.open(Sound);

            clip.addLineListener(new LineListener() {
                public void update (LineEvent event) {
                    if (event.getType() == LineEvent.Type.STOP) {
                        event.getLine().close();
                        System.out.printf("Playback ended!");
                        System.exit(0);
                    }
                }
            });
            System.out.printf("This sound is %f seconds long.", (clip.getMicrosecondLength() / 1000.0d));
            clip.start();
        } catch (Exception e) {
            ErrorHandler(e);
        }
    }

现在,这个函数几乎可以正常工作:当声音结束时,它调用event.getLine().close();函数,但是它被卡在一个“无限循环”中(不确定是否是),在执行该语句之后什么都没有,直到我手动杀死它为止。

如果我改变了路线

代码语言:javascript
复制
if (event.getType() == LineEvent.Type.STOP) {

代码语言:javascript
复制
if (event.getType() == LineEvent.Type.CLOSE) {

然后播放声音,程序正确退出,但在event.getLine().close();之后仍然没有执行任何语句。

问题是:这是event.getLine().close()的预期行为,还是我做错了什么?

解决方案:

LineListener实际上是基于一个过时的事实,即Java中有一个bug,我们需要显式地退出vm。没有侦听器,代码就能正常工作。

EN

回答 1

Stack Overflow用户

发布于 2011-11-25 17:16:54

看看它是否引发了一个例外:

代码语言:javascript
复制
public void update (LineEvent event) {
  if (event.getType().equals(LineEvent.Type.STOP)) {
    try { 
      event.getLine().close();
    } catch (Throwable t) {
      t.printStackTrace();
    }
    System.out.printf("Playback ended!");
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8271901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档