0

奇妙なプログラミングの問題に直面しています。それは私を疲れさせましたが、解決策は見つかりませんでした!

私のプログラムは主に、そのハードウェアからオーディオ メッセージを受信するために外部ハードウェアから発生するイベント (Java リスナー) に依存しています。

  1. 受信したメッセージを、データを返す別のクラスの静的メソッド「decode」に渡します
  2. 次に、FileOutputStream を開き、これらのデータ「オーディオ」をファイルに書き込み、FileOutputStream を閉じます。
  3. 別のクラスから静的メソッド「play」を呼び出して、オーディオ ファイルを再生します。

問題は、「Play」メソッドが初めて呼び出されるたびに、正しく実行されますが、イベントの発生が停止し、プログラムが終了しますが、例外はありません。プレイ方法をコメントアウトすると全てOK!

プログラムの終了を引き起こすメソッドについて何か考えがありますか?

 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() を呼び出してみてください。

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();
于 2012-05-04T15:58:06.657 に答える