0

我面临一个奇怪的编程问题。它让我筋疲力尽,但没有找到解决方案!

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

  1. 将接收到的消息传递给另一个返回数据的类的静态方法“解码”
  2. 然后我打开 FileOutputStream,将这些数据“音频”写入文件,然后关闭 FileOutputStream。
  3. 我从另一个类中调用静态方法“play”来播放音频文件。

问题是:每当第一次调用“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();}

}
4

1 回答 1

0

您可能正在使用事件线程来播放音乐。尝试在新线程中调用 Player.play()。

新线程(新 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();
于 2012-05-04T15:58:06.657 回答