[英]Java How to wait for a clip to end
我正在尝试播放一些小的声音效果,并且通过一种方法来执行此操作,该方法将加载剪辑,然后播放它,然后应关闭剪辑以允许以后加载新剪辑,而不会引起LineUnavailable问题。 这是我使用的方法:
public void playClip(String filename){
Clip clip = null;
try{
AudioInputStream inputStream = AudioSystem.getAudioInputStream(getClass().getResource(filename));
AudioFormat format = inputStream.getFormat();
DataLine.Info info = new DataLine.Info(Clip.class, format);
clip = (Clip)AudioSystem.getLine(info);
clip.open(inputStream);
clip.start();
}catch(Exception e){
e.printStackTrace();
}
}
现在,在clip.start()
,剪辑仅停留在某处,用完一行,直到出现以下错误:
javax.sound.sampled.LineUnavailableException: line with format PCM_SIGNED 44100.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian not supported.
at com.sun.media.sound.DirectAudioDevice$DirectDL.implOpen(DirectAudioDevice.java:513)
at com.sun.media.sound.DirectAudioDevice$DirectClip.implOpen(DirectAudioDevice.java:1304)
at com.sun.media.sound.AbstractDataLine.open(AbstractDataLine.java:121)
at com.sun.media.sound.DirectAudioDevice$DirectClip.open(DirectAudioDevice.java:1085)
at com.sun.media.sound.DirectAudioDevice$DirectClip.open(DirectAudioDevice.java:1175)
at com.andrewlalisofficial.ChatClientCore.playClip(ChatClientCore.java:233)
at com.andrewlalisofficial.ChatClientWindow$4.mouseClicked(ChatClientWindow.java:207)
at java.awt.Component.processMouseEvent(Component.java:6519)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3312)
at java.awt.Component.processEvent(Component.java:6281)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4872)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4698)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4501)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4698)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:747)
at java.awt.EventQueue.access$300(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:706)
at java.awt.EventQueue$3.run(EventQueue.java:704)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:720)
at java.awt.EventQueue$4.run(EventQueue.java:718)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:717)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
javax.sound.sampled.LineUnavailableException:格式为PCM_SIGNED 44100.0 Hz的行,16位,立体声,4字节/帧,不支持little-endian。 在com.sun.media.sound.DirectAudioDevice $ DirectDL.implOpen(DirectAudioDevice.java:513)在com.sun.media.sound.DirectAudioDevice $ DirectClip.implOpen(DirectAudioDevice.java:1304)在com.sun.media.sound com.sun.media.sound.DirectAudioDevice $ DirectClip.open(DirectAudioDevice.java:1085)上的.AbstractDataLine.open(AbstractDataLine.java:121)com.sun.media.sound.DirectAudioDevice $ DirectClip.open(DirectAudioDevice.java)上的。 :1175),位于com.andrewlalisofficial.ChatClientCore.playClip(ChatClientCore.java:233),位于com.andrewlalisofficial.ChatClientWindow $ 4.mouseClicked(ChatClientWindow.java:207),位于java.awt.Component.processMouseEvent(Component.java:6519) java.awt.Component的javax.swing.JComponent.processMouseEvent(JComponent.java:3312)在java.awt.Component.processEvent(Component.java:6281)在java.awt.Container.processEvent(Container.java:2229) .dispatchEventImpl(Component.java:4872)at java.awt.Container.dispatchEventImpl(Container.java:2287)at java.awt.Component.dispatchEvent(Component.java:4698) 在java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)在java.awt.LightweightDispatcher.processMouseEvent(Container.java:4501)在java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)在java.awt.LightweightDispatcher.processMouseEvent(Container.java:4501)在java.awt。 java.awt.Window.dispatchEventImpl(Window.java:2719)处的Container.dispatchEventImpl(Container.java:2273),java.awt.EventQueue.dispatchEventImpl(EventQueue)处的java.awt.Component.dispatchEvent(Component.java:4698) .java:747)at java.awt.EventQueue.access $ 300(EventQueue.java:103)at java.awt.EventQueue $ 3.run(EventQueue.java:706)at java.awt.EventQueue $ 3.run(EventQueue.java :704),位于java.security.ProtectionDomain $ 1.doIntersectionPrivilege(ProtectionDomain.java:76),位于java.security.ProtectionDomain $ 1.doIntersectionPrivilege(ProtectionDomain.java:87),位于java.security.AccessController.doPrivileged(Native Method)。 awt.EventQueue $ 4.run(EventQueue.java:720)at java.awt.EventQueue $ 4.run(EventQueue.java:718)at java.security.AccessController.doPrivileged(Native Metho) d)在java.security.ProtectionDomain $ 1.doIntersectionPrivilege(ProtectionDomain.java:76)在java.awt.EventQueue.dispatchEvent(EventQueue.java:717)在java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) .awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)at java.awt.EventDispatch pumpEvents(EventDispatchThread.java:138),位于java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
剪辑结束后如何添加clip.close()
?
尝试添加finally块以关闭连接
finally { if (clip!= null) { try { clip.close() } catch (Exceptione e) { /* ignored */} }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.