У меня проблемы со стандартным Java KeyListener в моем проекте.
Я заметил, что KeyListener, похоже, иногда не перенаправляет KeyEvents при запуске.
Симптомы проблемы:
При запуске приложения ввод ключа не обрабатывается. Такое бывает только иногда. Иногда мне приходится закрывать и запускать приложение 7-8 раз, пока оно не появится. Иногда это первая попытка. Когда это произойдет, оно не будет работать, пока я не перезапущу приложение.
Что я использую:
Window 7 x64 и новейшие версии 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:
Хорошо, ответь на мой вопрос:
Кажется, мне нужно вызвать setVisible (true) после установки размера окна:
JFrame window = new JFrame();
Now set the window size correctly
window.setSize(800, 600);
window.setVisible(true);
Выключение setSize () и setVisible (), похоже, заставляет его работать. Пробовал без проблем около десятка раз.
Я полагаю, что setVisible может не понравиться, чтобы дать Фокус окну, если оно имеет размер 0x0.
Вопрос в том, почему это вызывает проблему только в одном из некоторых случаев?