2012-05-04 2 views
0

У меня возникла странная проблема программирования. Он исчерпал меня, но решения не найдено!Событие Java убито, когда функция воспроизведения звука называется

Моя программа в основном зависит от события (Java Listener), который обжигал от внешнего оборудования для приема звукового сообщения от hardware.Inside EventHandler я сделать следующее

  1. передать полученное сообщение статический метод «декодировать» из другого класса, который возвращает данные
  2. , затем я открываю FileOutputStream, записываю эти данные «аудио» в файл и закрываю FileOutputStream.
  3. Я вызываю статический метод «играть» из другого класса для воспроизведения аудиофайла.

Проблема заключается в том, что всякий раз, когда метод «Воспроизвести» вызывается в первый раз, он выполняется правильно, но он вызывает остановку события и завершение программы, но без исключений. Когда я комментирую метод игры, все становится хорошо!

У вас есть представление о методе, вызывающем прерывание программы?

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() в новом потоке.

новая тема (новый 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

Смежные вопросы