2012-05-04 14 views
0

我正面臨一個奇怪的編程問題。它耗盡了我,但沒有找到解決方案!當用於音頻播放的函數被調用時Java事件被終止

我的程序主要是依賴於從外部硬件燒製從接收音頻消息的事件(爪哇監聽器),該hardware.Inside的事件處理程序i執行以下

  1. 傳遞所接收的消息,以從另一個類返回數據的靜態方法「解碼」
  2. 然後我打開FileOutputStream,將這些數據「音頻」寫入文件,然後關閉FileOutputStream。
  3. 我從另一個類中調用靜態方法「播放」來播放音頻文件。

問題是:每當首次調用「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();} 

} 

回答

0

您可能正在使用事件線程播放音樂。嘗試在新線程中調用Player.play()。 (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(); 
+0

謝謝回答,我試過線和得到這個錯誤:預計 新主題(新的Runnable(){Player.play();})啓動( );和錯誤箭頭指向播放()。你有好主意嗎? – Mash

+0

我已經更新了一個例子,並修復了原始代碼片段 – ControlAltDel

相關問題