我试图停止用户继续前进时正在播放的特定方法

时间:2019-04-03 22:25:39

标签: java methods audio-player

我正在制作一个游戏,一个特定的危险游戏,并且在游戏中,我有背景噪音,因此例如,如果用户正确回答问题,就会发出叮叮当响的声音,并且人群会欢呼。这不是一个重大的游戏中断问题,但是我想知道如果用户在提示的JOptionPane中单击“确定”,是否有任何方法可以消除噪音。我还要指出,我是编码的新手。

我尝试搜索如何停止正在播放的文件,但是我找不到任何东西,因此,如果有人知道如何制作它,则可以停止正在播放的文件或保存文件的方法本身可以被阻止,那将是巨大的。

package testing;

import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import static java.awt.Font.BOLD;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class testing implements ActionListener{

    static String Choice;       


    static String[][] Questions = {{"The Raptor is the mascot for which basketball team"}};

    static String[][] Answers = {{"Toronto Raptors"}};

public  JButton[][] t = new JButton[5][5];

public static void main(String[] args) {
    new testing();
    }

static int n = 100;

public testing() {

    JFrame scoreframe = new JFrame("SCORE");
    scoreframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
    scoreframe.setSize(400,250);
    scoreframe.setVisible(true);

    JFrame gameframe = new JFrame("Jeopardy");
    gameframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
    gameframe.setSize(1920,1080);
    gameframe.setLayout(new GridLayout(6, 4));


    for (int r = 0; r < 5; r++) {
        for (int c = 0; c < 5; c++) {
            String vakue = String.valueOf(n);
            t[r][c] = new JButton(vakue);
            t[r][c].setBackground(Color.BLUE);
            t[r][c].setForeground(Color.YELLOW);
            t[r][c].putClientProperty("rows", r);
            t[r][c].putClientProperty("columns", c);
            t[r][c].setFont(new Font("Swis721 BlkEx BT", BOLD, 40));
            t[r][c].addActionListener(this);
            gameframe.add(t[r][c]);
        }
        n = n +300;

        gameframe.setVisible(true);
    }
}

public static void crowd() {

      try {
       File file = new File( "crowd.wav");
       Clip clip = AudioSystem.getClip();
       clip.open(AudioSystem.getAudioInputStream(file));
       clip.start();

      } catch (Exception e) {
      }
     }

public static void applause() {

      try {
       File file = new File( "Applause.wav");
       Clip clip = AudioSystem.getClip();
       clip.open(AudioSystem.getAudioInputStream(file));
       clip.start();

      } catch (Exception e) {
      }
     }

public static void check() {

      try {
       File file = new File( "check.wav");
       Clip clip = AudioSystem.getClip();
       clip.open(AudioSystem.getAudioInputStream(file));
       clip.start();

      } catch (Exception e) {
      }
     }

@Override
 public void actionPerformed(ActionEvent e) {
    JButton A = new JButton();
    A = (JButton) e.getSource();
    int rows = (int) A.getClientProperty("rows");
    int cols = (int) A.getClientProperty("columns");
    Choice = JOptionPane.showInputDialog(null, Questions[rows][cols]);
    String score = A.getText();
  A.addActionListener(this);

    if (Choice.equalsIgnoreCase(Answers[rows][cols])) {
         check();
         applause();
         crowd();
      JOptionPane.showMessageDialog(null, "That's right! The correct answer was: " + Answers[rows][cols]+"! \nYou win " + score + "$");

            A.setEnabled(false);
    }    
}
}

我缩小了代码范围,因此,如果有人尝试在其程序中尝试使用它们,则不必处理任何其他问题。基本上,我分解了代码以显示问题,我知道您将无法听到声音,但是出于帮助目的,我们只说声音全都长10分钟(虽然不是真的,但可以说是),如果您运行我的代码并单击位置1,1处的第一个按钮,它将询问您猛禽是哪个篮球队的吉祥物,因此当您输入答案(“多伦多猛龙”)时,会出现一条消息,告诉用户他们得到了问题是正确的,以及他们赚了多少钱,因为这种情况发生在10分钟的音乐播放中。他们单击“确定”,并且音乐保留在整个音轨的背面,我如何才能做到这一点?当用户单击“确定”时,声音会停止吗?

1 个答案:

答案 0 :(得分:0)

首先,您想保留对当前剪辑的引用(无论它是否正在实际播放)。为此,创建一个保存剪辑的静态变量。然后,在每个play首先尝试运行stop时,定义playstop函数。此外,最好不要将相同的代码复制并粘贴到不同的函数中:

private static Clip clip = null;

public static void stop() {
    if (clip != null) {
        clip.stop();
        clip = null;
    }
}

public static void play(String toPlayName) {
    stop();
    File toPlay = new File(toPlayName);
    try {
        clip = AudioSystem.getClip();
        clip.open(AudioSystem.getAudioInputStream(toPlay));
        clip.start();
    } catch (Exception e) {
    }
}

public static void crowd() {
    play("crowd.wav");
}

public static void applause() {
    play("Applause.wav");
}

public static void check() {
    play("check.wav");
}