RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 910557
Accepted
Сергей Гуков
Сергей Гуков
Asked:2020-11-23 19:43:37 +0000 UTC2020-11-23 19:43:37 +0000 UTC 2020-11-23 19:43:37 +0000 UTC

wav 声音没有在 jar 中播放

  • 772

我正在尝试在应用程序中播放声音。从 IntelliJ IDEA 启动时,一切正常,但是当我收集 jar 工件并运行它时,里面没有声音。可能是什么问题呢?编码:

// воспроизведение звука
private void SoundPlay(int second) throws URISyntaxException {
    soundCountdown = null;
    soundEnd = null;

    try {
        InputStream bufferedIn1 = new BufferedInputStream(Main.class.getResourceAsStream("number.wav"));
        InputStream bufferedIn2 = new BufferedInputStream(Main.class.getResourceAsStream("null.wav"));

        AudioInputStream aff1 = AudioSystem.getAudioInputStream(bufferedIn1);
        AudioFormat af1 = aff1.getFormat();
        DataLine.Info info1 = new DataLine.Info(Clip.class, af1);

        AudioInputStream aff2 = AudioSystem.getAudioInputStream(bufferedIn2);
        AudioFormat af2 = aff2.getFormat();
        DataLine.Info info2 = new DataLine.Info(Clip.class, af2);

        // звук 0 секунд
        if (second == 0) {
            if (AudioSystem.isLineSupported(info2)) {
                soundEnd = (Clip) AudioSystem.getLine(info2);
                AudioInputStream ais2 = AudioSystem.getAudioInputStream(bufferedIn2);
                soundEnd.open(ais2);
                soundEnd.start();
            } else { System.exit(0); }
        }

        // звук 3, 2, 1 секунд
        if (second <= 3 && second != 0) {
            if (AudioSystem.isLineSupported(info1)) {
                soundCountdown = (Clip) AudioSystem.getLine(info1);
                AudioInputStream ais1 = AudioSystem.getAudioInputStream(bufferedIn1);
                soundCountdown.open(ais1);
                soundCountdown.start();
            } else { System.exit(0); }

        }
    } catch (Exception e) {
        e.printStackTrace();
        System.out.println("Ошибка воспроизведения звука!");
    }
}

日志

java.io.IOException: Stream closed
    at java.io.BufferedInputStream.getInIfOpen(BufferedInputStream.java:159)
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
    at java.io.BufferedInputStream.read(BufferedInputStream.java:265)
    at com.sun.media.sound.RIFFReader.read(RIFFReader.java:125)
    at com.sun.media.sound.RIFFReader.<init>(RIFFReader.java:60)
    at com.sun.media.sound.WaveFloatFileReader.internal_getAudioFileFormat(WaveFloatFileReader.java:65)
    at com.sun.media.sound.WaveFloatFileReader.getAudioFileFormat(WaveFloatFileReader.java:55)
    at com.sun.media.sound.WaveFloatFileReader.getAudioInputStream(WaveFloatFileReader.java:117)
    at javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1113)
    at main.WindowController.SoundPlay(WindowController.java:299)
    at main.WindowController.ShowImagesAction(WindowController.java:109)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
    at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
    at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1771)
    at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657)
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
    at javafx.event.Event.fireEvent(Event.java:198)
    at javafx.scene.Node.fireEvent(Node.java:8411)
    at javafx.scene.control.Button.fire(Button.java:185)
    at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182)
    at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96)
    at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89)
    at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
    at javafx.event.Event.fireEvent(Event.java:198)
    at javafx.scene.Scene$MouseHandler.process(Scene.java:3757)
    at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485)
    at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762)
    at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:394)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$353(GlassViewEventHandler.java:432)
    at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:431)
    at com.sun.glass.ui.View.handleMouseEvent(View.java:555)
    at com.sun.glass.ui.View.notifyMouse(View.java:937)
Ошибка воспроизведения звука!

解压 jar 时的层次结构 在此处输入图像描述

java
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    0x666c
    2020-11-24T01:55:55Z2020-11-24T01:55:55Z

    我重写了您的代码以使其工作:

    import javax.sound.sampled.LineEvent.Type; // Классов Type в jdk много, поэтому указал верный
    
    
    public class Main {
        public static void main(String[] args) throws URISyntaxException {
            new Main().soundPlay(0);
        }
    
        static class AudioListener implements LineListener { // Слушатель окончания звука,
                                                             // без него прога завершится сразу
                                                             // после начала проигрывания. (clip.start();)
                                                             // (не завершится если дальше будет код).
            private boolean done = false;
            @Override public synchronized void update(LineEvent event) {
              Type eventType = event.getType();
              if (eventType == Type.STOP || eventType == Type.CLOSE) {
                done = true;
                notifyAll();
              }
            }
            public synchronized void waitUntilDone() throws InterruptedException {
              while (!done) { wait();}
            }
          }
    
        private void soundPlay(int second) throws URISyntaxException {
            try {
                // Чтение при помощи потоков, прямо из jar 
                // (+ слеш т.к без него скомпилированная прога не работает.)
                InputStream bufferedIn1 = new BufferedInputStream(Main.class.getResourceAsStream("/number.wav"));
                InputStream bufferedIn2 = new BufferedInputStream(Main.class.getResourceAsStream("/null.wav"));
    
                AudioListener listener = new AudioListener();
    
                if (second == 0) {
                    AudioInputStream ais = AudioSystem.getAudioInputStream(bufferedIn1);
                    if( !AudioSystem.isLineSupported(new DataLine.Info(Clip.class, ais.getFormat())) ) System.exit(-1); // Всё в одной строке
    
                    Clip clip = AudioSystem.getClip();
                    clip.addLineListener(listener); // Добавление слушателя.
                    clip.open(ais);
                    clip.start();
                    listener.waitUntilDone(); // Пауза до окончания клипа (звука).
                } else if (second <= 3) {
                    AudioInputStream ais = AudioSystem.getAudioInputStream(bufferedIn2);
                    if( !AudioSystem.isLineSupported(new DataLine.Info(Clip.class, ais.getFormat())) ) System.exit(-1);
    
                    Clip clip = AudioSystem.getClip();
                    clip.addLineListener(listener);
                    clip.open(ais);
                    clip.start();
                    listener.waitUntilDone();
                }
            } catch (Exception e) {
                e.printStackTrace();
                System.out.println("Ошибка воспроизведения звука! Надеюсь это не напечатается :)");
            }
        }
    }
    

    评论中有提示,AudioListener类是从这里老实说的:Trouble playing wav in Java。

    • 1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5