Witam,
Staram się nauczyć programować w Javie, mam problem z pewnym przeraźliwie prostym programem, nie mam pojęcia skąd takie dziwne zachowanie i jak o uniknąć.
Klasa
Zadaniem programu jest szybka reakcja na wciskanie klawiszy, Klasa "Listen" to najprostsza, mała widoczna ramka, na której dokonywany jest cały eksperyment. Ma ona zaimplementowany i dodany KeyListener oraz jedną zmienną integer zdefiniowaną na samym początku klasy, tak, aby globalnie (dla całej klasy i przez gettery dla reszty programu) przechowywała kod wciśniętego klawisza. W ciele są 3 metody KeyListenera zmieniające stan zmiennej keyCode i getter odpowiedzialny za odczyt jej wartości.
Main
W main stworzony jest obiekt typu Listen o nazwie "l", a dalej w nieskończonej pętli program sprawdza, czy wciśnięty został "Esc", jeżeli tak, to zamyka cały program. Wydaje mi się, że to powinno działać, ale sorry.. to nie działa, dopóki w pętle nie wtrynię dodatkowo funkcji wyświetlającej na ekranie kod wciśniętego klawisza... ta funkcja nie powinna mieć znaczenia w działaniu programu.. tak mi się wydawało do tej pory.
Czy to jest jakiś problem z synchronizacją KeyListenera i Programu? Jaaa nie wiem.. Proszę o pomoc, kod jest poniżej.. wszystko piszę w notatniku, bo chcę się nauczyć metod, instrukcji i konstrukcji na pamięć, wszelkie IDE mają podpowiedzi, które mi to utrudniają.
Z góry dziękuję za pomoc.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
//LISTEN
class Listen extends JFrame implements KeyListener{
//VARIABLES
private int keyCode;
//END OF VARIABLES
//CONSTRUCTOR OF LISTEN
Listen(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
addKeyListener(this);
}//END OF CONSTRUCTOR OF LISTEN
//KEYLISTENER METHODS
public void keyPressed(KeyEvent e){
keyCode = e.getKeyCode();
}
public void keyReleased(KeyEvent e){
keyCode = 0;
}
public void keyTyped(KeyEvent e){}
//END OF KEYLISTENER METHODS
//SETTERS & GETTERS
public int getCode(){
return keyCode;
}
//END OF SETTERS & GETTERS
}//END OF LISTEN
//MAIN
public class Program{
//MAIN METHOD
public static void main(String[] args){
Listen l = new Listen();
while(true){
if(l.getCode() == 27){System.exit(1);}
//System.out.println(l.getCode()); /*Wisienka na torcie jest tutaj, wystarczy usunąć 2 ukośniki przed "System" i wszystko chula..*/
}
}//END OF MAIN METHOD
}//END OF MAIN