的AudioInputStream()不停止(AudioInputStream() does not

2019-10-16 18:14发布

我已插入背景音乐到使用我的程序AudioInputStream

当我按On ,背景声频会玩,并Off将停止播放背景音频。

这里是我的音频播放部分的代码部分:

public void playSound(int i)
{
    try 
    {
        .  //Others buttons sound
        .  //Others buttons sound
    if(i == 3 || i == 4)
    {
        AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new File("Background.wav"));
        Clip clip3 = AudioSystem.getClip( );
        clip3.open(audioInputStream);
        if(i == 3)
        {
            clip3.loop(Clip.LOOP_CONTINUOUSLY);
            clip3.start();
            settingSubMenuItem3.setEnabled(false);
            settingSubMenuItem4.setEnabled(true);
        }
        if(i == 4)
        {
            clip3.stop();
            settingSubMenuItem3.setEnabled(true);
            settingSubMenuItem4.setEnabled(false);
        }
    }
    catch(Exception e)
    {
        System.out.println("Error with playing sound.");
        e.printStackTrace();
    }
}

这里是ButtonListener部分:

private class MenuItemListener implements ActionListener
{
    public void actionPerformed(ActionEvent e)
    {
        if(e.getSource() == settingSubMenuItem3)
        {
            playSound(3);
        }
        if(e.getSource() == settingSubMenuItem4)
        {
            playSound(4);       
        }
    }
}

我的代码可以播放音频,当我按On按钮,但是当我按下Off按钮,这是行不通的。

有编译和运行期间不会出现错误。

什么是我的代码的错误?

Answer 1:

你的AudioInputStream变量的AudioInputStream和剪辑变量,CLIP3,是本地的方法。 你是想阻止的对象是不一样的演奏当前的一个。

让他们类字段,检查他们呼吁他们方法之前,是不为空,如果你想停止当前播放的对象不创建一个新的对象,你应该确定。

就像是:

public void playSound(int i) {
  try {
     // ...
     if (i == 3 || i == 4) {
        if (i == 3) {
           audioInputStream = AudioSystem
                 .getAudioInputStream(new File("Background.wav"));
           clip3 = AudioSystem.getClip();
           clip3.open(audioInputStream);
           clip3.loop(Clip.LOOP_CONTINUOUSLY);
           clip3.start();
           settingSubMenuItem3.setEnabled(false);
           settingSubMenuItem4.setEnabled(true);
        }
        if (i == 4) {
           if (clip3 != null && clip3.isActive()) {
              clip3.stop();
              settingSubMenuItem3.setEnabled(true);
              settingSubMenuItem4.setEnabled(false);
           }
        }
     }
  } catch (Exception e) {
     System.out.println("Error with playing sound.");
     e.printStackTrace();
  }
}

再次,制作的AudioInputStream和CLIP3非静态类字段。

顺便说一句,我会避免使用“魔法”的数字,如3和4,你正在做的,因为这可能会从现在开始调试6个月的魔鬼。 相反,给每一个JButton自己的行动。 它值得毫不逊色。



文章来源: AudioInputStream() does not stop