Почему не останавливается звук?

Я написал код на Java с двумя условиями: если нажата клавиша "Enter", то начинает проигрываться музыка, а если нажата клавиша "Backspace", то музыка останавливается. Если запустить программу, кнопка, которая останавливает звук, работает. Но если запустить звук снова, через клавишу "Enter", то звук не будет останавливаться, хотя сама кнопка работает. Покопавшись в Интернете я понял, что скорее всего причина в том, что я два раза создал два объекта класса Clip, которые никак не связаны между собой (я могу ошибаться, я точно не знаю), но вот как реализовать это в своём проекте я не понимаю. Вот мой код:

import javax.sound.sampled.*;
import javax.swing.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.File;
import java.io.IOException;
public class Main extends JFrame implements KeyListener {
    public Main(){
        setVisible(true);
        addKeyListener(this);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
    public static Clip clip;
    public static AudioInputStream ais;
    public static File file;
    public static void main(String[] args){
        Main main = new Main();
        try{
            file = new File("C:\\Users\\Петр\\IdeaProjects\\Flappy_Bull3_final\\src\\Flap\\music.wav");
            ais = AudioSystem.getAudioInputStream(file);
            clip = AudioSystem.getClip();
            clip.open(ais);
            clip.start();
            Thread.sleep(clip.getMicrosecondLength());
            clip.close();
            ais.close();
        }catch (LineUnavailableException | IOException | InterruptedException | UnsupportedAudioFileException e) {
            e.printStackTrace();
        }
    }
    @Override
    public void keyTyped(KeyEvent e) {
    }
    @Override
    public void keyPressed(KeyEvent e) {
        if(e.getKeyCode()==KeyEvent.VK_ENTER){
            try{
                clip.start();
                Thread.sleep(clip.getMicrosecondLength());
                clip.close();
                ais.close();
            }catch (IOException | InterruptedException e1) {
                e1.printStackTrace();
            }
        }
        if(e.getKeyCode()==KeyEvent.VK_BACK_SPACE){
            clip.stop();
        }
    }
    @Override
    public void keyReleased(KeyEvent e) {
    }
}

Буду крайне благодарен за помощь.


Ответы (0 шт):