Java 试图在第二次按JButton键时停止播放wav文件

Java 试图在第二次按JButton键时停止播放wav文件,java,audio,wav,Java,Audio,Wav,它可以找到.wav文件,但按下JButton时不会播放该文件。我最近在这里问了一个类似的问题,关于这段代码,以及它如何不会在第二次按下JButton键时停止,而是创建一个新的音频实例。一位好心的人建议我将变量改为实例字段,我在这方面的经验很少。我试图改变它们,但很可能是我做错了。这是我的密码: import java.net.MalformedURLException; import java.lang.NullPointerException; import java.lang.Illeg

它可以找到.wav文件,但按下JButton时不会播放该文件。我最近在这里问了一个类似的问题,关于这段代码,以及它如何不会在第二次按下JButton键时停止,而是创建一个新的音频实例。一位好心的人建议我将变量改为实例字段,我在这方面的经验很少。我试图改变它们,但很可能是我做错了。这是我的密码:

import java.net.MalformedURLException;

import java.lang.NullPointerException;

import java.lang.IllegalArgumentException;

import javax.sound.sampled.AudioInputStream;

import javax.sound.sampled.AudioSystem;

import javax.sound.sampled.Clip;

import javax.sound.sampled.LineUnavailableException;

import javax.sound.sampled.UnsupportedAudioFileException;

import java.net.URL;

import javax.sound.sampled.*;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;

import javax.imageio.ImageIO;

import java.awt.*;

import javax.swing.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

public class aMeme extends JFrame implements ActionListener{

  public JButton button;

  public boolean check;

  public boolean audio;

  public static URL fg;

  public static AudioInputStream gram;

  public static Clip fitness;

  static{

    try{

      URL fg = new URL ("file:c:/Users/kebrobst18/Downloads/test.wav");

      Clip fitness = AudioSystem.getClip();

      AudioInputStream gram = AudioSystem.getAudioInputStream(fg);

    }

    catch (LineUnavailableException f){

    }

    catch (UnsupportedAudioFileException | IOException f) {

    }

  }

  public void paint(Graphics g){

    if (check == true){

      BufferedImage img = null;

      try{

        img = ImageIO.read(new File("C:/Users/kebrobst18/Downloads/Fitnessgram.png"));

      }

      catch (IOException e){

      }

      g.drawImage(img, 0, 0, this);

     }

  }

  public void start(){

    setLayout(new BorderLayout());

    button=new JButton();

    button.setPreferredSize(new Dimension(200, 100));

    button.setText("Start/Stop"); 

    button.addActionListener(this);

    add(button, BorderLayout.SOUTH);

    setSize(500,500);

    setVisible(true);

    audio = false;

  }       

  public void actionPerformed(ActionEvent e){    

    check = true;

    repaint();

    try{

      if (audio == false){

        fitness.open();

        fitness.start();

      }      

      else if (audio == true){

        fitness.stop();

        audio = false;

     }

    }

    catch (LineUnavailableException f){

    }

    catch(IllegalArgumentException f){

    }

    catch(NullPointerException f){

    }

  } 

  public static void main(String args[]){

    aMeme x = new aMeme();

    x.start();

  }

}

你什么时候设置过
audio=true
?我肯定你不会每隔一行写一行代码,所以不要发布这样格式的代码。如果您希望我们阅读代码,然后使代码可读。类名以大写字符开头。您所需要做的就是查看JavaAPI来了解这个Java约定。不要使用静态变量。不要覆盖paint(),尤其是在框架上。ActionLIstener中不需要“repInt()”。在上一个问题中,您得到了简单的工作代码。你所需要做的就是根据指示剪辑当前状态的变量来启动/停止剪辑。你几乎忽略了气垫船上满是鳗鱼给你的最后一个问题的所有建议。他关于例外的观点特别重要。异常会告诉您何时出现错误、错误的类型,并且通常会有一条有用的消息,说明发生错误的原因。通过忽略所有异常,如果剪辑或文件有问题,您将永远无法发现,我们也无法帮助您。我个人就是不愿意帮助那些有空捕集区的人。就像开车不看路一样。