在Java中使用AudioClip非常冻结程序?

时间:2014-05-15 12:24:21

标签: java audio

我没有任何代码可以特别显示链接,因为这是一个非常普遍的问题......你看,我制作了一个带有8个AudioClip变量的小游戏小程序,这些应该每次都会播放用户采取了行动。例如:玩家点击次数=拍摄声音播放。问题是,当我添加这些AudioClip文件的那一刻,我的程序只是非常冻结,如果冻结特别糟糕,就会变得无法播放。

我这样做的简单方法就在这里(实际上来自书)

AudioClip playerShooting;

playerShooting=getAudioClip(getDocumentBase(),"PlayerShooting.wav");

然后,只要用户点击,我就会使用以下内容:

playerShooting.play(): 

在添加这些wav文件之前,我的程序运行顺利。它们甚至都不长。我在哪里出错了,怎样才能删除随机冻结?

编辑:

这是我正在运行的代码:

public void mouseClicked(MouseEvent e)
                {
                    if(playerAlive)
                    {
                        timeShotsAfter=System.currentTimeMillis();

                        if((timeShotsAfter-timeShotsBefore)>=100)
                        {
                            if(shotIndex<10)
                            {
                                playerShooting(); //Here is where I call the function
                                shotFiredX[shotIndex]=currentX;
                                shotFiredY[shotIndex]=currentY;
                                shotSize[shotIndex]=20;
                            }

                            if(shotIndex<10)
                                shotIndex++;
                            else
                                shotIndex=0;

                            timeShotsBefore=System.currentTimeMillis();
                        }
                        else{}

                        toggleShooting=false;
                    }
                }

这是功能:

public void playerShooting()
        {
            new Thread(
            new Runnable() {
                public void run() {
                    try {
                        playerShooting.play();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }).start();
        }

2 个答案:

答案 0 :(得分:0)

在另一个主题中播放音频片段? 编辑:

new Thread(
            new Runnable() {
                public void run() {
                    try {
                        playerShooting.play(): 
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }).start();

编辑:

我不太确定这部分是否正确:

  

getAudioClip(getDocumentBase(), “PlayerShooting.wav”);

尝试添加System.out.println(getDocumentBase());以查看位置是否正确。

答案 1 :(得分:0)

我回来时遇到了同样的问题。我为解决我的问题所做的是更新到JDK 8.在之前的JDK版本中,音频文件似乎是一个事后的想法,可能是错误的。如果你仍然遇到问题,JDK 8能够播放比wav小得多的mp3文件(你可能想试试这个)。确保在剪辑完成后使用sound.stop(),因为这可能会释放一些内存。