2013-07-22 30 views
0

如果用戶輸入錯誤的密碼超過5次,我會發出安全警告,然後彈出一個框讓用戶解鎖並且框架還會繼續循環警告聲。用戶解鎖後,它將跳回到登錄框架。我的問題是我解鎖後,系統跳回登錄幀,但聲音仍在運行。爲什麼?如何在打開新的JFrame時停止音頻

這是我的按鈕代碼跳回登入畫面

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(); 
} 
+0

您嘗試停止或關閉剪輯嗎? – MadProgrammer

+0

我嘗試過之前,但也許我把錯誤的地方?我應該在哪裏放? – Q123Q

回答

0

首先clip必須是你類的實例字段...

public class ... { 

    private Clip clip; 

然後,當您創建它,你需要引用這個值...

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

現在,我可能會使用WindowListener,並且windowClosing事件發生時,請嘗試撥打clip.stop(),因爲我很迂腐,clip.close()

+0

謝謝,它的工作原理。然後我輸入clip.stop();在該方法中,我打開登錄框架和音頻停止...再次感謝您 – Q123Q

+0

知道它的工作很高興......因爲我實際上從來沒有使用過'AudioSystem':P – MadProgrammer