4

我正在尝试构建一个使用音效的游戏。我之前没有处理过Java API,所以我可能会犯一些错误。尽管如此,效果很好——我唯一的问题是,每当我的程序退出时,我可能会听到奇怪的嗡嗡声。

知道如何摆脱它吗?现在我正在尝试使用 killLoop() 方法在退出发生之前杀死任何播放声音,但这并没有让我到任何地方。

感谢您的帮助!

public class Sound
{
private AudioInputStream audio;
private Clip clip;

public Sound(String location)
{
    try {
            audio = AudioSystem.getAudioInputStream(new File(location));
            clip = AudioSystem.getClip();
            clip.open(audio);
        }

        catch(UnsupportedAudioFileException uae) {
            System.out.println(uae);
        }
        catch(IOException ioe) {
            System.out.println(ioe);
        }
        catch(LineUnavailableException lua) {
            System.out.println(lua);
        }
}

public void play()
{
    clip.setFramePosition(0);
    clip.start();
}

public void loop()
{
    clip.loop(clip.LOOP_CONTINUOUSLY);
}

public void killLoop()
{
    clip.stop();
    clip.close();
}
}

public class Athenaeum
{
public static void main(String[] args) throws IOException
{
    final Game game = new Game();
    GUI athenaeumGui = new GUI(game);

    athenaeumGui.setSize(GUI.FRAME_WIDTH, GUI.FRAME_HEIGHT);
    athenaeumGui.setTitle("Athenaeum");
    athenaeumGui.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
    athenaeumGui.setLocationRelativeTo(null);
    athenaeumGui.setMinimumSize(new Dimension(GUI.FRAME_WIDTH, GUI.FRAME_HEIGHT));
    athenaeumGui.buildGui();
    athenaeumGui.setVisible(true);

    athenaeumGui.addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent we)
        {
            game.killAudio(); // method calls Sound.killLoop()
            System.exit(0);
        }
    });
}

}
4

1 回答 1

1

Java api中,他们说 AudioInputStream 类有一个“.close()”方法,可以“关闭这个音频输入流并释放与该流相关的任何系统资源”。也许这是你可以尝试的。

于 2013-07-22T07:35:04.023 回答