gpt4 book ai didi

java - 在 Java 中停止和启动 Clip 时如何避免 NullPointerException?

转载 作者:行者123 更新时间:2023-12-02 08:39:16 25 4
gpt4 key购买 nike

我正在用Java制作一个游戏,我想要在后台播放主题曲,但每次用户按下减号时音量都会减小。无论我尝试什么,除了初始化 Clip 的方法之外,我都无法通过其他方法执行此操作,因为 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());
}

在 Debug模式下,空指针异常似乎来自于 gameAudio.stopSound() 调用 Clip.stop();和clip.close();我怎样才能避免这种情况?

最佳答案

您的问题在这一行:

            Clip clip = AudioSystem.getClip();

这是创建一个局部变量,而不是将剪辑设置为您下面使用的成员变量。

相反,请尝试:

            clip = AudioSystem.getClip();

关于java - 在 Java 中停止和启动 Clip 时如何避免 NullPointerException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61486941/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com