gpt4 book ai didi

java - 当我运行此代码时,它只是在播放音频时卡住。但是,我希望动画与音频同时运行。我怎样才能做到这一点?

转载 作者:行者123 更新时间:2023-12-02 09:57:53 25 4
gpt4 key购买 nike

我一直在尝试使用 Java Swing Graphics 为角色制作动画。我从主屏幕转换到 JPanel,该 JPanel 应该在音频(WAV 文件)运行时同时显示动画。但是,首先运行音频,然后显示 JPanel 并进行动画处理。

如何修复代码中的此错误,以便音频和动画同时运行?

我知道我的 Thread.sleep() 函数存在错误,会强制整个线程 hibernate 。但是,我无法弄清楚如何在没有 Thread.sleep() 的情况下运行音频,并且线程不会与存在 Thread.sleep() 方法同时运行。

我目前使用的是 Java 8。

音频类

import java.io.*;
import javax.sound.sampled.*;
public class AudioManager
{
static AudioInputStream audioInputStream = null;
static Clip curClip = null;

public static void playSound(String fileName)
{

System.out.println("Playing Sound");

new Thread(new Runnable()
{

public void run()
{
try
{
audioInputStream = AudioSystem.getAudioInputStream(new File(fileName));
curClip = AudioSystem.getClip();

curClip.open(audioInputStream); //Opens Stream
curClip.start();

Thread.sleep(curClip.getMicrosecondLength() / 1000); //Pauses the thread
audioInputStream.close();
curClip.close();
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}).run();

}
}

调用音频方法的动画器类

        Timer t1 = new Timer(background_Intro_Speed, new ActionListener() 
{
public void actionPerformed(ActionEvent e)
{
System.out.println(isShowing());
if(isShowing())
{
System.out.println(audioOver);
if(audioOver && animated.xPosition <= 905)
animated.xPosition += 5;
else if(animated.xPosition > 905 && audioOver)
{
System.out.println("Animation Ended");
swapPanel();
}
else if(!audioOver)
{
new Thread(new Runnable()
{
public void run()
{
System.out.println("In Thread");
AudioManager.playSound("foo.wav");
audioOver = true;
}
}).run();

}
}
}
});
t1.start();

最佳答案

}).run();

您的主题不是主题。您只是执行线程的 run() 方法。

代码应该是:

}).start();

启动一个单独的线程,以便代码不在事件调度线程上执行。

关于java - 当我运行此代码时,它只是在播放音频时卡住。但是,我希望动画与音频同时运行。我怎样才能做到这一点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55859144/

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