所以我正在用 Java 开发一个类似钢琴的程序。我使用如下所示的方法来触发每个键的正确声音
public void Sound(String file){
try{
AudioInputStream ais = AudioSystem.getAudioInputStream(getClass().getResource(file));
Clip clip = AudioSystem.getClip();
clip.open(AudioSystem.getAudioInputStream(getClass().getResource(file)));
clip.start();
}catch(Exception e){
e.printStackTrace();
}
game.setFocusable(true);//my desperate try to regain focus on click...
game.requestFocus();
}
然而,在一段时间后,KeyListener
完全失去焦点,KeyEvent
将不再被触发。如果有人知道我如何获得对框架中的 KeyListener
的关注,我很可能会听到您所说的内容。
我尝试过的:
触发后将面板再次设置为可聚焦
确保程序仍然在后台运行,并且确实是面板失去焦点。
其他小调整
最佳答案
之前已经多次询问过这个问题,在这种情况下,最好的解决方案是不使用 KeyListener。而是使用 Key Bindings (点击链接),它在组件焦点方面表现得更好。
侧面建议:请确保在 Swing 事件线程关闭时播放音乐,以免占用此线程并卡住 GUI,并且所有 Swing 调用都开启 Swing 事件线程。
关于Java获取焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42888142/