2017-03-16 2 views
2

두 번째 클릭시이 루핑 웨이브를 일시 중지하려고하는 두뇌를 두드리고 있습니다. 어디서 잘못 되었나요? OP 도움이 솔루션의jToggle 버튼을 두 번 누르면 어떻게 멈출까요?

private void jToggleButton2ActionPerformed(java.awt.event.ActionEvent evt) {            
     JToggleButton btn = (JToggleButton) evt.getSource(); 
      if (btn.isSelected()) { 
      try { 
       String soundName = "yourSound.wav"; 
       AudioInputStream audioInputStream = null; 
       try { 
        audioInputStream = AudioSystem.getAudioInputStream(new File(soundName).getAbsoluteFile()); 
       } catch (UnsupportedAudioFileException | IOException ex) { 
        Logger.getLogger(GEN.class.getName()).log(Level.SEVERE, null, ex); 
       } 
       Clip clip = null; 
       try { 
        clip = AudioSystem.getClip(); 
       } catch (LineUnavailableException ex) { 
        Logger.getLogger(GEN.class.getName()).log(Level.SEVERE, null, ex); 
       } 
       clip.open(audioInputStream); 
       clip.start(); 
       clip.loop(100); 
      } catch (LineUnavailableException | IOException ex) { 
       Logger.getLogger(GEN.class.getName()).log(Level.SEVERE, null, ex); 
      } 
      } else { 
      try { 
} 
+0

토글 버튼은 두 가지 상태를 가정한다. 당신은 [this] (http://stackoverflow.com/a/7524627/1572356)을 확인할 수 있으므로 버튼의 상태를 가져 오는 방법을 알 수 있습니다. –

+0

두 상태를 등록하는 것은 문제가되지 않습니다.이 함수는 출력 함수로 테스트했습니다. 두 번째 클릭이 등록되면 루프 된 오디오가 중지됩니다. – Sc001010tt

+0

Clip 객체에서 사용할 수있는'stop' 메서드가 있습니다. . 메소드 밖의 클립을 정의하십시오. 버튼이 토글되지 않으면, 클립은 null이 아니며'isRunning()'을 클립하고'stop()'합니다. –

답변

0

개요는 :

private Clip clip; // declared outside the method 

private void jToggleButton2ActionPerformed(java.awt.event.ActionEvent evt) { 
    JToggleButton btn = (JToggleButton) evt.getSource(); 
    if (btn.isSelected()) { 
     // initialize `clip` variable, if not done already 
     // call start() if not running 
    } else { 
     if (clip != null && clip.isRunning()) { 
      clip.stop(); 
     } 
    } 
} 
관련 문제