Я делаю игру в Java и хочу, чтобы песня темы играла в фоновом режиме, но каждый раз, когда пользователь нажимает минус, громкость уменьшается. Независимо от того, что я пытаюсь, я не могу сделать это из другого метода, кроме того, где я инициализировал клип, потому что cli.
Это код для моего класса GameAudio:
public class GameAudio {
private static float volume = -20.0f;
private Clip clip;
public GameAudio(String audioLocation) {
try {
File filePath = new File(audioLocation);
if (filePath.exists()) {
AudioInputStream audioInput = AudioSystem.getAudioInputStream(filePath);
Clip clip = AudioSystem.getClip();
clip.open(audioInput);
FloatControl gainControl = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN);
gainControl.setValue(getVolume());
clip.loop(Clip.LOOP_CONTINUOUSLY);
clip.start();
} else {
System.out.println("Incorrect audio file path!");
}
} catch (Exception e) {
e.printStackTrace();
}
}
public float getVolume() {
return volume;
}
public void setVolume(float volume) {
GameAudio.volume = volume;
}
public void stopSound() {
clip.stop();
clip.close();
}
}
В моем классе Player я положил:
private String musicPath = "maintheme.wav";
GameAudio gameAudio = new GameAudio(musicPath);
и затем вниз
if (input.minus.isPressed()) {
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
gameAudio.stopSound();
if (gameAudio.getVolume() <= -80.0f) {
gameAudio.setVolume(-70.0f);
}
gameAudio.setVolume(gameAudio.getVolume() - 10.0f);
System.out.println("Volume: " + gameAudio.getVolume());
}
Когда в режиме отладки исключение нулевого указателя, кажется, происходит из gameAudio.stopSound (), вызывающего клип. стоп(); и clip.close (); Как я могу избежать этого?