gpt4 book ai didi

java - AudioInputStream() 不会停止

转载 作者:行者123 更新时间:2023-11-29 03:46:27 24 4
gpt4 key购买 nike

我已使用 AudioInputStream 将背景音频插入到我的程序中。

当我按下 On 时,背景音频将播放,而 Off 将停止播放背景音频。

这是我的音频播放部分的代码:

public void playSound(int i)
{
try
{
. //Others buttons sound
. //Others buttons sound
if(i == 3 || i == 4)
{
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new File("Background.wav"));
Clip clip3 = AudioSystem.getClip( );
clip3.open(audioInputStream);
if(i == 3)
{
clip3.loop(Clip.LOOP_CONTINUOUSLY);
clip3.start();
settingSubMenuItem3.setEnabled(false);
settingSubMenuItem4.setEnabled(true);
}
if(i == 4)
{
clip3.stop();
settingSubMenuItem3.setEnabled(true);
settingSubMenuItem4.setEnabled(false);
}
}
catch(Exception e)
{
System.out.println("Error with playing sound.");
e.printStackTrace();
}
}

这是 ButtonListener 部分:

private class MenuItemListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == settingSubMenuItem3)
{
playSound(3);
}
if(e.getSource() == settingSubMenuItem4)
{
playSound(4);
}
}
}

当我按下 On 按钮时,我的代码可以播放音频,但是当我按下 Off 按钮时,它不起作用。

编译运行没有报错。

我的代码有什么错误?

最佳答案

您的 AudioInputStream 变量 audioInputStream 和 Clip 变量 clip3 是该方法的本地变量。您试图停止的对象与当前正在播放的对象不同。

使它们成为类字段,在调用它们的方法之前检查它们是否不为空,如果您试图停止当前正在播放的对象,请不要创建新对象,这样应该没问题。

类似于:

public void playSound(int i) {
try {
// ...
if (i == 3 || i == 4) {
if (i == 3) {
audioInputStream = AudioSystem
.getAudioInputStream(new File("Background.wav"));
clip3 = AudioSystem.getClip();
clip3.open(audioInputStream);
clip3.loop(Clip.LOOP_CONTINUOUSLY);
clip3.start();
settingSubMenuItem3.setEnabled(false);
settingSubMenuItem4.setEnabled(true);
}
if (i == 4) {
if (clip3 != null && clip3.isActive()) {
clip3.stop();
settingSubMenuItem3.setEnabled(true);
settingSubMenuItem4.setEnabled(false);
}
}
}
} catch (Exception e) {
System.out.println("Error with playing sound.");
e.printStackTrace();
}
}

同样,使 audioInputStream 和 clip3 成为非静态类字段。

顺便说一句,我会避免使用“魔术”数字,例如 3 和 4,因为这可能会在 6 个月后成为调试的麻烦。而是为每个 JButton 提供自己的 Action。它值得拥有。

关于java - AudioInputStream() 不会停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10666827/

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