java声音在jsf页面播放

0 java

URL url1 = new URL("http://localhost:8080/COEE/audio/underdog.wav");
AudioStream as = new AudioStream(url1.openStream());
// Create an AudioStream object from the input stream.
//    AudioStream as = new AudioStream(in);         
// Use the static class member "player" from class AudioPlayer to play
// clip.
AudioPlayer.player.start(as);  
Run Code Online (Sandbox Code Playgroud)

当我在我的本地机器(Windows机器)上玩时,它的工作正常.在Rack Space(云计算)上运行相同的代码时,在那里打开jdk6,tomcat,ubuntu.我不认为我们在云计算上有合理的驱动力.我们是否需要云计算中的声音驱动程序才能使用上述代码?我在jsf页面中使用上面的代码.当我点击按钮时,它会转到上面的代码并执行它.

javax.faces.FacesException: #{popup.captchaSpeech}: java.lang.NoClassDefFoundError: Could not initialize class org.classpath.icedtea.pulseaudio.EventLoop
    com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:90)
    com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
    com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    com.icesoft.faces.webapp.http.core.JsfLifecycleExecutor.apply(JsfLifecycleExecutor.java:18)
    com.icesoft.faces.webapp.http.core.ReceiveSendUpdates.renderCycle(ReceiveSendUpdates.java:132)
    com.icesoft.faces.webapp.http.core.ReceiveSendUpdates.service(ReceiveSendUpdates.java:74)
    com.icesoft.faces.webapp.http.core.RequestVerifier.service(RequestVerifier.java:31)
    com.icesoft.faces.webapp.http.common.standard.PathDispatcherServer.service(PathDispatcherServer.java:24)
    com.icesoft.faces.webapp.http.servlet.BasicAdaptingServlet.service(BasicAdaptingServlet.java:16)
    com.icesoft.faces.webapp.http.servlet.PathDispatcher.service(PathDispatcher.java:23)
    com.icesoft.faces.webapp.http.servlet.SessionDispatcher.service(SessionDispatcher.java:53)
    com.icesoft.faces.webapp.http.servlet.SessionVerifier.service(SessionVerifier.java:26)
    com.icesoft.faces.webapp.http.servlet.PathDispatcher.service(PathDispatcher.java:23)
    com.icesoft.faces.webapp.http.servlet.MainServlet.service(MainServlet.java:131)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    com.icesoft.faces.webapp.xmlhttp.BlockingServlet.service(BlockingServlet.java:56)

root cause 

javax.faces.FacesException: #{popup.captchaSpeech}: java.lang.NoClassDefFoundError: Could not initialize class org.classpath.icedtea.pulseaudio.EventLoop
    com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)
    javax.faces.component.UICommand.broadcast(UICommand.java:387)
    javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:475)
    javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:756)
    com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
    com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
    com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    com.icesoft.faces.webapp.http.core.JsfLifecycleExecutor.apply(JsfLifecycleExecutor.java:18)
    com.icesoft.faces.webapp.http.core.ReceiveSendUpdates.renderCycle(ReceiveSendUpdates.java:132)
    com.icesoft.faces.webapp.http.core.ReceiveSendUpdates.service(ReceiveSendUpdates.java:74)
    com.icesoft.faces.webapp.http.core.RequestVerifier.service(RequestVerifier.java:31)
    com.icesoft.faces.webapp.http.common.standard.PathDispatcherServer.service(PathDispatcherServer.java:24)
    com.icesoft.faces.webapp.http.servlet.BasicAdaptingServlet.service(BasicAdaptingServlet.java:16)
    com.icesoft.faces.webapp.http.servlet.PathDispatcher.service(PathDispatcher.java:23)
    com.icesoft.faces.webapp.http.servlet.SessionDispatcher.service(SessionDispatcher.java:53)
    com.icesoft.faces.webapp.http.servlet.SessionVerifier.service(SessionVerifier.java:26)
    com.icesoft.faces.webapp.http.servlet.PathDispatcher.service(PathDispatcher.java:23)
    com.icesoft.faces.webapp.http.servlet.MainServlet.service(MainServlet.java:131)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    com.icesoft.faces.webapp.xmlhttp.BlockingServlet.service(BlockingServlet.java:56)

root cause 

javax.faces.el.EvaluationException: java.lang.NoClassDefFoundError: Could not initialize class org.classpath.icedtea.pulseaudio.EventLoop
    javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
    com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
    javax.faces.component.UICommand.broadcast(UICommand.java:387)
    javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:475)
    javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:756)
    com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
    com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
    com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    com.icesoft.faces.webapp.http.core.JsfLifecycleExecutor.apply(JsfLifecycleExecutor.java:18)
    com.icesoft.faces.webapp.http.core.ReceiveSendUpdates.renderCycle(ReceiveSendUpdates.java:132)
    com.icesoft.faces.webapp.http.core.ReceiveSendUpdates.service(ReceiveSendUpdates.java:74)
    com.icesoft.faces.webapp.http.core.RequestVerifier.service(RequestVerifier.java:31)
    com.icesoft.faces.webapp.http.common.standard.PathDispatcherServer.service(PathDispatcherServer.java:24)
    com.icesoft.faces.webapp.http.servlet.BasicAdaptingServlet.service(BasicAdaptingServlet.java:16)
    com.icesoft.faces.webapp.http.servlet.PathDispatcher.service(PathDispatcher.java:23)
    com.icesoft.faces.webapp.http.servlet.SessionDispatcher.service(SessionDispatcher.java:53)
    com.icesoft.faces.webapp.http.servlet.SessionVerifier.service(SessionVerifier.java:26)
    com.icesoft.faces.webapp.http.servlet.PathDispatcher.service(PathDispatcher.java:23)
    com.icesoft.faces.webapp.http.servlet.MainServlet.service(MainServlet.java:131)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    com.icesoft.faces.webapp.xmlhttp.BlockingServlet.service(BlockingServlet.java:56)

root cause 

java.lang.NoClassDefFoundError: Could not initialize class org.classpath.icedtea.pulseaudio.EventLoop
    org.classpath.icedtea.pulseaudio.PulseAudioMixer.openImpl(PulseAudioMixer.java:654)
    org.classpath.icedtea.pulseaudio.PulseAudioMixer.openLocal(PulseAudioMixer.java:588)
    org.classpath.icedtea.pulseaudio.PulseAudioMixer.openLocal(PulseAudioMixer.java:584)
    org.classpath.icedtea.pulseaudio.PulseAudioMixer.open(PulseAudioMixer.java:579)
    org.classpath.icedtea.pulseaudio.PulseAudioDataLine.open(PulseAudioDataLine.java:95)
    org.classpath.icedtea.pulseaudio.PulseAudioSourceDataLine.open(PulseAudioSourceDataLine.java:75)
    org.classpath.icedtea.pulseaudio.PulseAudioSourceDataLine.open(PulseAudioSourceDataLine.java:90)
    com.sun.media.sound.DataPusher.start(DataPusher.java:99)
    com.sun.media.sound.DataPusher.start(DataPusher.java:83)
    sun.audio.AudioDevice.startSampled(AudioDevice.java:122)
    sun.audio.AudioDevice.openChannel(AudioDevice.java:194)
    sun.audio.AudioPlayer.start(AudioPlayer.java:140)
    com.highmark.coee.managedbean.PopupBean.captchaSpeech(PopupBean.java:404)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:616)
    org.apache.el.parser.AstValue.invoke(AstValue.java:172)
    org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
    com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:68)
    javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
    com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
    javax.faces.component.UICommand.broadcast(UICommand.java:387)
    javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:475)
    javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:756)
    com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
    com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
    com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    com.icesoft.faces.webapp.http.core.JsfLifecycleExecutor.apply(JsfLifecycleExecutor.java:18)
    com.icesoft.faces.webapp.http.core.ReceiveSendUpdates.renderCycle(ReceiveSendUpdates.java:132)
    com.icesoft.faces.webapp.http.core.ReceiveSendUpdates.service(ReceiveSendUpdates.java:74)
    com.icesoft.faces.webapp.http.core.RequestVerifier.service(RequestVerifier.java:31)
    com.icesoft.faces.webapp.http.common.standard.PathDispatcherServer.service(PathDispatcherServer.java:24)
    com.icesoft.faces.webapp.http.servlet.BasicAdaptingServlet.service(BasicAdaptingServlet.java:16)
    com.icesoft.faces.webapp.http.servlet.PathDispatcher.service(PathDispatcher.java:23)
    com.icesoft.faces.webapp.http.servlet.SessionDispatcher.service(SessionDispatcher.java:53)
    com.icesoft.faces.webapp.http.servlet.SessionVerifier.service(SessionVerifier.java:26)
    com.icesoft.faces.webapp.http.servlet.PathDispatcher.service(PathDispatcher.java:23)
    com.icesoft.faces.webapp.http.servlet.MainServlet.service(MainServlet.java:131)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    com.icesoft.faces.webapp.xmlhttp.BlockingServlet.service(BlockingServlet.java:56)a
Run Code Online (Sandbox Code Playgroud)

Bal*_*usC 5

这里有一个关于"服务器端"和"客户端"的重大误解.

AudioPlayer.player.start(as);  
Run Code Online (Sandbox Code Playgroud)

这会在执行此代码的机器上运行声音.因此,网络服务器.在本地开发环境中,webbrowser和webserver都在物理上在同一台机器上运行,因此看起来好像您的webbrowser正在播放声音.但事实并非如此,它就是网络服务器!现在,当您将Web应用程序发布到云中时,执行该操作时,云服务器正在播放声音.

您想要在Web浏览器中播放声音.您可以使用HTML <embed><object>为此.另见本教程/参考资料.这是相关的摘录,经过修改以适合您的WAV文件的位置:

<object classid="clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95">
    <param name="FileName" value="/COEE/audio/underdog.wav" />
</object> 
Run Code Online (Sandbox Code Playgroud)