私のプロジェクトでデフォルトのJava KeyListenerに問題があります。 KeyListenerは、開始時に転送されるKeyEventsを取得しないように見えます。JPanelのKeyListenerが無作為に応答しない
問題の症状: アプリケーションの起動時にキー入力が処理されません。これはときどき起こるだけです。ときには、これを表示するまでアプリを終了して7〜8回起動する必要があります。時にはそれが最初の試みです。それが起こると、私は再びアプリケーションを再起動するまで動作しません。
私が使っているもの: 最新のEclipseとJDKのバージョン。 私はデバッグモードでブレークポイントを入れて、JPanelのインスタンスをチェックアウトしました:私はすでに見つけた何
。 KeyListenerは常に正常に追加されます。 また、MouseListenerとMouseMotionListenerは常にうまく動作します。
最小限のコード:
public class Player implements KeyListener
{
public void keyTyped(KeyEvent e){}
public void keyReleased(KeyEvent e){ }
public void keyPressed(KeyEvent e){
System.out.println("Key Pressed!");
}
}
public class Game {
public static void main(String[] args) {
new Game();
}
public Game(){
JFrame window = new JFrame();
window.setVisible(true);
//Now set the window size correctly
window.setSize(800, 600);
//Set-up the rest of the window
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setResizable(true);
//Create our panel
JPanel canvas = new JPanel();
canvas.setFocusable(true);
window.add(canvas); //Add it to our window
Player k = new Player();
canvas.addKeyListener(k);
}
}
はお時間をいただき、ありがとうございます!
PS: [OK]を、自分の質問に答える:
私がウィンドウのサイズを設定後のsetVisible(true)をを呼び出すために持っていることを思わ:
JFrame window = new JFrame();
Now set the window size correctly
window.setSize(800, 600);
window.setVisible(true);
はのsetSizeを切り替えます( )とsetVisible()はこのように動作するようです。問題なく何十回も試してみました。
サイズが0x0の場合、setVisibleはフォーカスをウィンドウに与えたくないかもしれないと思います。 問題は次のとおりです。なぜ、これが原因で問題が発生するのはなぜですか?
のKeyListenerを使用しないでくださいではなく、[キーバインディング](のhttp:// download.oracle.com/javase/tutorial/uiswing/misc/keybinding.html)。それでは、焦点はそれほど大きなものではありません。 –
断続的な問題は、[初期スレッド](http://download.oracle.com/javase/tutorial/uiswing/concurrency/initial.html)を常に思い出させます。 – trashgod