我已使用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
按钮时,它不起作用。
编译和运行期间没有错误。
我的代码有什么错误?
答案 0 :(得分:4)
您的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非静态类字段。
顺便说一句,我会避免使用" magic"你正在做的数字如3和4,因为这可能会成为一个从现在开始调试6个月的魔鬼。而是给每个JButton自己的Action。它不值得。