调用音频播放功能时,Java事件被终止

时间:2012-05-04 15:49:53

标签: java events audio

我正面临一个奇怪的编程问题。它已经耗尽了我,但没有找到解决方案!

我的程序主要依赖于从外部硬件触发的事件(Java Listener),用于从该硬件接收音频消息。在eventHandler中,我执行以下操作

  1. 将收到的消息传递给另一个返回数据的类的静态方法“decode”
  2. 然后我打开FileOutputStream,将这些数据“audio”写入文件,然后关闭FileOutputStream。
  3. 我从另一个类调用静态方法“play”来播放音频文件。
  4. 问题是:无论何时第一次调用方法“Play”,它都会正确执行,但会导致事件停止提升,程序终止但无异常。当我评论播放方法时,一切都变好了!

    您对导致程序终止的方法有所了解吗?

     public void messageReceived(int to,Message message)
     {
    
    speexAudioMsg msg = (speexAudioMsg)message;
     try{
    
        byte[] output = jspeexDecoder.decode(msg.get_frame());
    
    os = new FileOutputStream(file);
    os.write(output);
    os.close();
    Player.play();  
      }
      catch (IOException ex) {ex.printStackTrace();}
    
    }
    

1 个答案:

答案 0 :(得分:0)

您可能正在使用活动主题播放音乐。尝试在新线程中调用Player.play()。

new Thread(new Runnable(){public void run(){Player.play()}})。start();

这是一个例子:


    static String url = "http://www.stackoverload.com";

    public static void threadTest() {
        new Thread(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                try {
                    URL url2 = new URL(url);
                    url2.openStream();
                } catch (MalformedURLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }

        }).run();