我的应用程序在进入不同按钮的区域时会播放不同的声音。当鼠标退出按钮区域时,我想要停止所有声音。我在mouseEntered
方法中启动声音,并在mouseExited
方法中停止它们:
@Override
public void mouseEntered(MouseEvent mouse) {
allForms.playSounds(mouse);
}
@Override
public void mouseExited(MouseEvent mouse) {
allForms.stopSounds(mouse);
}
问题是mouseEntered
方法不会阻止它在中间执行以开始执行mouseExited
。
有没有办法解决这个问题?
答案 0 :(得分:2)
您似乎在Swing事件线程上调用了长时间运行的代码,从而占用了线程。一个解决方案是在后台线程中调用playSounds,该线程应该释放Swing线程,以便它响应你并希望允许你调用stopSounds。 SwingWorker可以帮助您创建后台线程,并允许其代码以线程安全的方式与swing进行交互。
另外,触发代码的另一种方法是收听JButton的ButtonModel以获取翻转事件。
修改强>
您在评论中说明:
是否可以使用SwingWorker而无需扩展类?我的课程已经扩展了JFrame。