Warum funktioniert mein KeyListener nicht?

Ich habe in Java ein Rechteck mithilfe eines JPanel gezeichnet und wollte, dass es sich bei Tastendruck dreht. Aber irgendwas habe ich falsch gemacht. Ich bin noch Anfänger, also bitte habt Gnade. :P

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.*;
import java.awt.geom.AffineTransform;
import javax.swing.JPanel;
import javax.swing.JFrame;

public class RotateRectangle {
  public static void main(String[] args) {
    new RotateRectangle();
  }

  private JFrame window;

  private int cnt = 0;

  public RotateRectangle() {
    window = new JFrame();
    window.add(P);
    window.setBounds(100, 100, 300, 300);

    new Thread(new Runnable() {
      @Override
      public void run() {
        window.addKeylistener(new Keyadapter());

        public void keyPressed(KeyEvent e) {
          int key = e.getKeyCode();

          while (key == KeyEvent.VK_ENTER) {
            ++cnt;

            if (cnt >= 360) {
              cnt = 0;
            }

            P.repaint();

            try {
              Thread.sleep(10);
            }
            catch (InterruptedException e) {
              e.printStackTrace();
            }
          }

          /*while (true) {
            ++cnt;

            if (cnt >= 360) {
              cnt = 0;
            }

            P.repaint();

            try {
              Thread.sleep(10);
            }
            catch (InterruptedException e) {
              e.printStackTrace();
            }
          }
        }*/
      }).start();

      window.setVisible(true);
    }

    //     { //         { //                                       
    
    private JPanel P = new JPanel() {
      @Override
      public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D)g;
        g2.drawString("Drehung: " + cnt + "°",5, 16);
        AffineTransform saveAT = g2.getTransform();
        AffineTransform rotateTransformer = new AffineTransform();
        rotateTransformer.setToRotation(
          Math.toRadians(cnt), getSize().width/2, getSize().height / 2);
        g2.transform(rotateTransformer);
        g2.drawRect(getSize().width / 2, getSize().height / 2, 50, 50);
        g2.setTransform(saveAT);
        //    }
        //   }
    }
  };
}
Programmieren, Java, tastendruck
Java: Computer soll Zahl erraten?

Hallo, es geht um folgende Aufgabe: Der Spieler soll sich eine Zahl zwischen 1 und 1000 denken. Nun soll der Computer durch geschicktes Fragen innerhalb von 10 Versuchen diese Zahl erraten, natürlich ohne dass der Spieler ihm diese sagt. Meine Idee war, die Menge der möglichen Zahl als Intervall aufzufassen. Der Computer probiert es zunächst einmal mit der Mitte dieses Intervalls (am Anfang wäre es 500, denn 500 liegt genau in der Mitte von 1 und 1000). Dann fragt er den Spieler, ob die Zahl größer oder kleiner ist und passt dementsprechend das Intervall der möglichen Zahlen an, bis eben das Intervall so klein ist, bis er schließlich die richtige Zahl errät. Mit diesem Gedanken habe ich versucht, ein Programm zu schreiben, das aber leider nicht funktioniert und ich finde die Fehler einfach nicht selbst. Über Hilfe / Tipps würde ich mich sehr freuen! Danke!

import java.util.Scanner;
public class Aufgabe16 {
public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    // k dient als Zählvariable für die benötigten Versuche
    int k = 0;
    double g1, g2, mitte;
    // g1 ist die linke Grenze des Intervalls, in der die Zahl liegen muss
    g1 = 0;
    // g2 ist die rechte Grenze des Intervalls, in der die Zahl liegen muss
    g2 = 1000;
    // mitte ist die Mitte des Intervalls
    mitte = -1;
    // n als Eingabe des Spielers
    int n = -1;
    System.out.println("Denke dir eine beliebige Zahl zwischen 1 und 1000.");
    
    do {
    // Versuche zählen
    k = k + 1;
    // Mitte des Intervalls berechnen
    mitte = (g2 - g1) / 2;
    System.out.println(mitte);
    System.out.println("Ist die Zahl größer oder kleiner?");
    System.out.println("Drücke 0 für kleiner); 1 für größer; 2 wenn richtig erraten");
    n = input.nextInt();
    
    if (n == 0) {
        // Zahl ist kleiner als die Mitte des Intervalls 
        // also rechte Intervallgrenze anpassen
        g2 = mitte;
    } else {
        if (n == 1) {
            // Zahl ist größer als die Mitte des Intervalls 
            // also linke Intervallgrenze anpassen
            g1 = mitte;
        } else {
            if (n != 2) {
                // Wenn man was anderes als 0, 1, 2 eintippt, kommt Fehlermeldung
                System.out.println("Inkorrekte Eingabe!");
            }
        }
    }
    
// while-Schleife, bis der Spieler 2 drückt (richtig erraten)   
} while (!(n == 2));
    
    input.close();
    System.out.println("Die Zahl wurde erraten. Sie lautet " + mitte + ".");
    System.out.println("Der Computer hat " + k + " Versuche gebraucht.");
    

} }

Computer, Programmieren, Java, Zahlen, Programmierung, Code, Informatik

Was möchtest Du wissen?