在Java中使用AudioClip会严重冻结程序吗?
我没有任何代码来显示链接,因为这是一个相当普遍的问题…你看,我制作了一个带有8个音频剪辑变量的小游戏小程序,这些小程序应该在用户每次执行某个操作时播放。例:玩家点击=射击声音播放。问题是,在我添加这些音频剪辑文件的那一刻,我的程序就严重冻结,如果冻结情况特别糟糕,程序将无法运行 我做这件事的简单方法就是在这里(实际上是从书中) 然后,每当用户单击时,我都会使用以下命令:在Java中使用AudioClip会严重冻结程序吗?,java,audio,Java,Audio,我没有任何代码来显示链接,因为这是一个相当普遍的问题…你看,我制作了一个带有8个音频剪辑变量的小游戏小程序,这些小程序应该在用户每次执行某个操作时播放。例:玩家点击=射击声音播放。问题是,在我添加这些音频剪辑文件的那一刻,我的程序就严重冻结,如果冻结情况特别糟糕,程序将无法运行 我做这件事的简单方法就是在这里(实际上是从书中) 然后,每当用户单击时,我都会使用以下命令: playerShooting.play(): 在添加这些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;
}
}
在另一个线程中播放音频剪辑? 编辑: 编辑: 我不太确定这部分是否正确: getAudioClip(getDocumentBase(),“PlayerShooting.wav”)
尝试添加
System.out.println(getDocumentBase())
查看位置是否正确。我前一段时间也遇到了同样的问题。我解决问题的方法是更新到JDK 8。在以前的JDK版本中,音频文件似乎是事后才想到的,可能有缺陷。如果您仍然有问题,JDK 8可以播放比wav小得多的mp3文件(您可能想试试这个)。确保剪辑完成后使用sound.stop()
,因为这可能会释放一些内存。我不熟悉线程,但你的意思是我应该用你的代码替换“playerShooting.play();”?他想调用线程中的play()方法(即代替//play AUDIO code注释)。@user3436981检查编辑。这样,每当用户单击一个单独的线程时,就会创建一个单独的线程来播放声音,并且运行应用程序的主线程不会被阻止。是的,我刚刚更新了我的程序,我所做的是,当用户单击时,我运行了一个包含你的代码的函数。这就是我应该做的吗?我刚试过,但还是死机了。@user3436981请在您的问题中输入一些代码。
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();
}
new Thread(
new Runnable() {
public void run() {
try {
playerShooting.play():
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();