按钮事件停止声音

时间:2015-02-16 14:47:10

标签: java button audio

我有声音代码,可以在主类中包含的GUI上循环播放。 主类代码:

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类中,我想制作一个会停止声音的按钮事件,我试图在主类中创建一个stop()方法,以便在按钮中使用它,但到目前为止它无效。

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);
            }
        });
    }     
}

1 个答案:

答案 0 :(得分:0)

我想你可能想尝试调用SoundTest来在构造函数中播放。在事件按钮中停止剪辑并尝试检查您的听众是否已正确注册以收听该事件。您可以使用actionPerformed()来管理事件,而不是使用按钮上的适配器。对我来说没有什么真正的优势,它只是一种替代方案。