title: KeyListener doesn't work
body: <p>I'm programing a game Bomberman-like, and I have a problem with my KeyListener.</p>
  
  <p>The thing is, when the game is running, the KeyListener doesn't respond, but when it's not running, it does what I tell him to.</p>
  
  <p>Here is my code </p>
  
  <pre><code>public class direction extends Canvas implements KeyListener {
  
  static float bmx = 35;
  static float bmy = 35;
  static float v = 0.03f;
  
  public static BufferStrategy strategie;
  public static BufferedImage image;
  
  public direction()  {                                           //pas sûr de ce que ça fait
      GraphicsEnvironment ge =                                    //on m'a dit de le mettre           
              GraphicsEnvironment.getLocalGraphicsEnvironment();  //le programme marche très bien sans
      GraphicsDevice gd = ge.getDefaultScreenDevice();
      GraphicsConfiguration gc = gd.getDefaultConfiguration();
      image =  gc.createCompatibleImage(700,  700);
      setSize(700, 700);
  
  }
  
      static boolean gauche;
      static boolean droite;
      static boolean haut;
      static boolean bas;
  
  
      public void keyPressed(KeyEvent e) {
  
          if (e.getKeyCode() == KeyEvent.VK_LEFT) {
              gauche = true;
          }
          if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
              droite = true;
              System.out.println("lal");
          }
          if (e.getKeyCode() == KeyEvent.VK_DOWN) {
              bas = true;
          }
          if (e.getKeyCode() == KeyEvent.VK_UP) {
              haut = true;
          }
      }
      public void keyReleased(KeyEvent e) {
          if (e.getKeyCode() == KeyEvent.VK_LEFT) {
              gauche = false;
          }
          if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
              droite = false;
          }
          if (e.getKeyCode() == KeyEvent.VK_DOWN) {
              bas = false;
          }
          if (e.getKeyCode() == KeyEvent.VK_UP) {
              haut = false;
          }
      }
      public void keyTyped(KeyEvent e) {
      }
  
  
  public static void draw(){
  
      Graphics2D g = (Graphics2D) strategie.getDrawGraphics();
  
      for(int ligne= 0 ; ligne &lt; board.gridHauteur; ligne++){
          for(int colonne= 0 ; colonne &lt; board.gridLargeur ; colonne++){
  
              switch (board.plateau1[ligne][colonne]) {
              case 0 : g.setColor(Color.lightGray);
              g.fillRect( 30*ligne, 30*colonne , 30, 30);
              break;
              case 1 : g.setColor(Color.black);              //dessine et donne la propriété 'BLOCKED' à certains bloques
              g.fillRect( 30*ligne, 30*colonne , 30, 30);
              board.plateau1[ligne][colonne] = board.BLOCKED;
              break;
              case 2 : g.setColor(Color.darkGray);
              g.fillRect( 30*ligne, 30*colonne , 30, 30);
              board.plateau1[ligne][colonne] = board.BLOCKED;
              break;
              }
          }
      }
      g.setColor(Color.red);
      g.fillRect((int)bmx, (int)bmy, 20, 20);   //dessine le "joueur"
      strategie.show();
  }
  
  public static void run() {
  
      long dernierTempsLoop = System.currentTimeMillis();   // avec cette ligne, nous demandons un t0
  
      while(true) {
  
          long delta = (System.currentTimeMillis() - dernierTempsLoop); // puis, à chaque nouvel boucle
          dernierTempsLoop = System.currentTimeMillis();               //nous calculons le temps que la 
                                                                      //boucle à mise pour s'effectuer
  
          for (int i=0;i&lt;delta / 5;i++) {
              logic(5);                   //permet d'appeler à ce qu'il y ait peu de mouvements si la boucle est rapide
          }                               // et plus de mouvements si elle est plus lente ce qui garantit une vitesse constante
                                          // quelle que soit le temps que la boucle met pour s'effectuer
          if ((delta % 5) != 0) {
              logic(delta % 5);
          }
  
          draw();     //dessine le terrain et le rectangle
  
          try { Thread.sleep(10); } catch (Exception e) {};   //permet au programme de ne pas "surchauffer"
      }
  </code></pre>
  
  <p>}
      }</p>
  
  <p>then </p>
  
  <pre><code>public board()
  {
      super("Bomberman");
      setSize(fenLargeur,fenHauteur);
      g = new direction();
      g.setFocusable(true);
  
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      getContentPane().setBackground(Color.BLACK);
  
      JPanel content = new JPanel();
      content.setLayout(new BorderLayout());
      content.add(g, BorderLayout.CENTER);
      g.addKeyListener(g);                            // &lt;=== c'est CA qui me pose problème
      setContentPane(content);
      setVisible(true);
  
  
      g.createBufferStrategy(2);
      Bm.direction.strategie = g.getBufferStrategy();
  
  }`
  </code></pre>
  
  <p>and... </p>
  
  <pre><code>dispose();
          board b = new board();
          b.g.createBufferStrategy(2);
          direction.strategie = b.g.getBufferStrategy();
  
          direction.run();
  </code></pre>
  
  <p>I hope I'm understandable, and thank you for reading.</p>