2015-02-16 2 views
0

У меня есть код для звука, который петли и воспроизводит мой графический интерфейс, содержащийся в основном классе. Главный код класса:Остановить звук с событием кнопки

public class SoundTest { 
public static Clip clip; 
public static Mixer mixer; 
/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) { 
    // TODO code application logic here 

    StartGUI GUI = new StartGUI(); 
    GUI.setVisible(true); 

    Mixer.Info[] mixInfos = AudioSystem.getMixerInfo(); 
    mixer = AudioSystem.getMixer(mixInfos[0]); 

    DataLine.Info dataInfo = new DataLine.Info(Clip.class, null); 
    try{ 
     clip = (Clip)mixer.getLine(dataInfo); 
    } 
    catch(LineUnavailableException l){ 
     l.printStackTrace(); 

    } 

    try{ 
     URL soundURL = Main.class.getResource("/soundtest/8-Bit-Noise-1.wav"); 
     AudioInputStream audioStrim = AudioSystem.getAudioInputStream(soundURL); 
     clip.open(audioStrim); 
    } 
    catch(LineUnavailableException l){ 
     l.printStackTrace(); 
    } 
    catch(UnsupportedAudioFileException e){ 
     e.printStackTrace(); 
    } 
    catch (IOException i){ 
     i.printStackTrace(); 
    } 
    clip.start(); 
    do{ 
     System.out.println(clip.isActive()); 
     try{ 
      clip.loop(Clip.LOOP_CONTINUOUSLY); 
      Thread.sleep(50); 

     } 
     catch(InterruptedException ie){ 
      ie.printStackTrace(); 
     } 
    }while(clip.isActive()); 


} 

public void stop() { 
    clip.stop(); 
} 

}

В моем классе JFrame я хочу, чтобы событие кнопки, которая остановит звук, я попытался сделать метод остановки() в главном классе, чтобы использовать он в кнопке, но пока он не работает.

код JFrame:

public class StartGUI extends javax.swing.JFrame { 

    SoundTest q; 

    /** 
    * Creates new form SoundTestGUI 
    */ 
    public StartGUI() { 
     initComponents(); 
    } 



    private void SoundBtnActionPerformed(java.awt.event.ActionEvent evt){           
     // TODO add your handling code here: 
     q.stop(); 
    }           

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String args[]) { 


     /* Create and display the form */ 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       new StartGUI().setVisible(true); 
      } 
     }); 
    }  
} 
+0

Как это работает? Любые исключения бросаются? – Vineet

+0

Я предполагаю, что SoundTest отлично работает сам по себе. Я предполагаю, что когда вы написали StartGUI, вы намерены запустить программу с помощью метода main() в StartGUI вместо SoundTest. Звучит ли звук, когда вы это делаете? Часть трудности в оказании помощи также заключается в том, что мы не видим кода для кнопки или того, как вы присоединяете слушателя к Button. Кроме того, код, запускающий SoundTest, должен, вероятно, должен быть в конструкторе или в его собственном методе, а не в основном методе. Это поможет с ясностью. –

ответ

0

Я думаю, вы можете попробовать позвонить SoundTest играть в конструктор. Остановите клип в кнопке события и попробуйте проверить, чтобы ваши слушатели были правильно зарегистрированы для прослушивания события. Вы можете использовать actionPerformed() для управления событиями вместо использования адаптера на кнопке. Для меня нет реального преимущества, это просто альтернатива.

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