2017-03-19 124 views
0

所以我正在研究一个类似于Java的钢琴程序。我用的,看起来像这样的方法来触发正确的声音为每个键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(); 

} 

但是什么happends的是,在一段时间的KeyListener完全以后失去焦点KeyEvent将不再被triggerd。如果有人知道我能如何在框架中专注于KeyListener,那么我会更倾向于听到你说的话。

我曾尝试:

  1. 在触发设置在面板集中,能够再次

  2. 确信,这样的程序仍然在后台运行,它的确是面板失去焦点。

  3. 其他小的调整

回答

5

这已经被问了很多次之前,在这种情况下,最好的办法是不使用的KeyListener。取而代之的是使用Key Bindings(点击链接),它在组件焦点方面的表现要好得多。

方的建议:一定要发挥你的音乐关闭Swing事件线程的以免占用这个线程并冻结您的GUI,所有的Swing调用来对 Swing事件线程做出

+0

所以基本上创建一个单独的线程声音被运行在? –