Как сделать паузу и возобновить звук другим способом, чем тот, в котором он был сделан? - PullRequest
1 голос
/ 30 марта 2019

Я пытаюсь сделать игру и пытаюсь сделать кнопку «отключить звук» и «включить», но я не могу понять, как сделать так, чтобы при нажатии кнопки останавливался тот же клип, который воспроизводится наначало программы.(используя разные методы конечно).Я пытался сделать клип и аудио общедоступным, но получаю сообщение об ошибке, и я не уверен, почему.

public class TowerDefense 
{
    String filepath = "MenuTheme.wav";
    private Clip clip;
void playMusic(String musicLocation) 
{
    try{
        File musicPath = new File(musicLocation);

        if(musicPath.exists())
        {
        AudioInputStream audioInput = AudioSystem.getAudioInputStream(musicPath);
        clip = AudioSystem.getClip();
        clip.open(audioInput);
        clip.start();
        clip.loop(Clip.`LOOP_CONTINUOUSLY`);
        }
    }
    catch(Exception ex)
    {
        ex.printStackTrace();
    }
}
void pauseMusic(String musicLocation2)
{
long clipTimePosition = clip.getMicrosecondPosition();
clip.stop();    
}
==============
//this is in a different private method called Options
panel.setButtonsActionListener2(**new** ActionListener(){
    @Override
    public void actionPerformed(ActionEvent e){
    frame.dispose();
        TowerDefense musicObject = new TowerDefense();
        musicObject.pauseMusic(filepath);
    Options();
        }
    });

Я ожидал выхода остановки клипа, а затем вы можете либо снова воспроизвести его, либо отключить.В этом случае он просто говорит об ошибке, когда я нажимаю кнопку отключения звука.

1 Ответ

0 голосов
/ 30 марта 2019

Итак, в коде, который запускается, когда вы нажимаете кнопку отключения звука, вы создаете новый объект TowerDefense, которому предоставляется путь к музыке. Вот проблема с этим. Уже воспроизводимый клип существует в программе. Создание нового объекта TowerDefense не даст вам автоматически доступ к воспроизводимому клипу.

Убедитесь, что вы вызываете метод pauseMusic для того же объекта , где вы вызвали метод playMusic.

Таким образом, если вы уже создали объект TowerDefense в программе и назвали playMusic, то предоставьте слушателю действия доступ к этому объекту и используйте существующий объект для вызова pauseMusic.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...