Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在打开新JFrame时停止音频_Java_Loops_Audio - Fatal编程技术网

Java 如何在打开新JFrame时停止音频

Java 如何在打开新JFrame时停止音频,java,loops,audio,Java,Loops,Audio,我做了一个安全警告,如果用户输入错误的密码超过5次,那么它将弹出一个框架,要求用户解锁,该框架也将继续循环的警告声。用户解锁后,它将跳回登录框。我的问题是,解锁后,系统跳回登录画面,但声音仍在运行。为什么? 这是我的按钮代码跳回登录框 Staff s = new Staff(); String id = m_id.getText(); String pass = m_pass.getText(); String position = "Manager"

我做了一个安全警告,如果用户输入错误的密码超过5次,那么它将弹出一个框架,要求用户解锁,该框架也将继续循环的警告声。用户解锁后,它将跳回登录框。我的问题是,解锁后,系统跳回登录画面,但声音仍在运行。为什么?

这是我的按钮代码跳回登录框

Staff s = new Staff();
       String id = m_id.getText();
       String pass = m_pass.getText();
        String position = "Manager";
        try{
            String sql = "Select * from Staff Where Position='"+position+"'";
            pst=conn.prepareStatement(sql);
            rs=pst.executeQuery();

            while(rs.next()){
                String add = rs.getString("Staff_ID");
               s.setStaff_ID(add);

                String add2 = rs.getString("Password");
                s.setPassword(add2);

            }

            if((s.getStaff_ID().equals(id)) && (s.getPassword().equals(pass))){
                    warning(clip);
                dispose();
                new login().setVisible(true);

            }

        }catch(Exception e){
            JOptionPane.showMessageDialog(null,e.getMessage());
        }
我用这个来循环声音

private void warning(){
        try {

         URL url = this.getClass().getClassLoader().getResource("sound/aleart.wav");
         AudioInputStream audioIn = AudioSystem.getAudioInputStream(url);

         Clip clip = AudioSystem.getClip();

         clip.open(audioIn);
         clip.loop(Clip.LOOP_CONTINUOUSLY);

                        }catch(Exception ex){
            JOptionPane.showMessageDialog(null, ex.getMessage());
        }
    }
我的GUI名称是WarningLogin,我在这里调用
warning()

public WarningLogin() {
              initComponents();
                warning();
}

首先
clip
需要是类的实例字段

public class ... {

   private Clip clip;
然后当你创建它时,你需要引用这个值

//Clip clip = AudioSystem.getClip();
clip = AudioSystem.getClip();

现在,我可能会使用一个
WindowListener
,当
windowClosing
事件发生时,尝试调用
clip.stop()
,因为我是个学究,
clip.close()

你尝试过停止或关闭clip吗?我以前尝试过,但可能放错地方了??我应该把它放在哪里?谢谢,它很管用。然后我输入clip.stop();在方法中,我打开了登录框和音频停止…再次感谢您,很高兴知道它工作了…因为我实际上从未使用过
音频系统
:P