2017-03-19 164 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

所以基本上創建一個單獨的線程聲音被運行在? –