2016-09-08 11 views
1

Моя цель - создать программу, которая отображает всплывающее окно с помощью одной кнопки под названием play. Я использую внутренний класс и прослушиватель действий. Кнопка фактически воспроизводит аудиоклип. Теперь я хотел бы сделать так, чтобы каждый раз, когда я нажимал кнопку воспроизведения, он воспроизводит ее с самого начала, и я не слышу больше одного экземпляра клипа, который воспроизводится в его завершении. Вот код, который у меня есть только для внутреннего класса:Воспроизведение аудиофайла в java

private class PlaySound implements ActionListener { 

    public void actionPerformed(ActionEvent e) { 
     String filename = "/Users/philipgouldman/Desktop/iPhoneRingtones/Dummy_Yeah.wav"; 

     try { 
      Clip clip = AudioSystem.getClip(); 
      clip.open(AudioSystem.getAudioInputStream(new File(filename))); 
      clip.setFramePosition(0); 
      clip.start(); 
     } catch (Exception exc) { 
      exc.printStackTrace(System.out); 
     } 
    } 

} 

Я был бы признателен за любые советы или предложения по достижению этой цели. Я прочитал на интерфейсе клипа javadoc, что, если пользователь хочет, чтобы действие перезапустилось, чтобы просто вызвать stop после setFramePosition(0). Я не могу сказать, что я понимаю, что это значит. Может ли кто-нибудь вести меня в правильном направлении?

ответ

0

Переместите свой Clip объект за пределами этого дескриптора, чтобы его состояние можно было исследовать позже.

например.

private class PlaySound implements ActionListener { 

    private Clip clip = null; 
    public void actionPerformed(ActionEvent e) { 
     String filename = "/Users/philipgouldman/Desktop/iPhoneRingtones/Dummy_Yeah.wav"; 

     try { 
      if (clip == null) { 
       clip = AudioSystem.getClip(); 
       clip.open(AudioSystem.getAudioInputStream(new File(filename))); 
      } 
      clip.setFramePosition(0); 
      clip.start(); 
     } catch (Exception exc) { 
      exc.printStackTrace(System.out); 
     } 
    } 

} 
+0

Eclipse, мой редактор не может скомпилировать это, в частности, для объявления и инициализации статического объекта Clip. Он говорит, что он не может быть объявлен в нестационарном внутреннем типе –

+0

UPDATE: вынул статический модификатор, также вставил мой путь к файлу, работает так же, как я хотел, чтобы он поблагодарил вас :) –

+0

Конечно, я уже сделал :) –

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

  • Нет связанных вопросов^_^