Java获得了关注

Alb*_*rme 0 java swing keylistener jpanel

所以我正在研究Java中的Piano like-program.我使用一个看起来像这样的方法来触发每个键的正确声音

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();

}
Run Code Online (Sandbox Code Playgroud)

然而什么是happends,经过一段时间的KeyListener完全以失去焦点KeyEvent将不再被triggerd.如果有人知道我如何能够专注于KeyListener框架,我会更多地听到你要说的话.

我尝试过的:

  1. 在触发时将面板设置为可再次聚焦

  2. 确保程序仍然在后台运行,实际上它是失去焦点的面板.

  3. 小其他调整

Hov*_*els 5

之前已多次询问此问题,在这种情况下,最佳解决方案是不使用KeyListener.而是使用键绑定(单击链接),它在组件焦点方面表现得更好.

方建议:一定要发挥你的音乐关闭 Swing事件线程,以便不占用此线程并冻结您的GUI,所有的Swing电话进行 Swing事件线程.