KeyListener StackOverflowError

Ich bin gerade dabei ein Spiel zu programmieren.
Wenn ich das Spiel starte funktioniert alles so wie geplant doch nach ung. 1 minute bekomme ich eine Exception und ich kann keine Tasten mehr drücken.

Ich denke das hier der Fehler liegt in der ActionPerformed
Also ich stell mir den Fehler so vor: Er erstellt immer wieder in der actionPerformed mit dem Befehl this.addKeyListener(this); einen neuen keylistener und nach 1 min ist er dan überlasstet und wirf eine Exception. Aber wenn ich diesen Befehl aus der ActionPerformed nehme und sie z.B in den Konstruktor gebe funktionieren die Tasten schon beim Programmstart nicht.

Java:
@Override
    public void actionPerformed(ActionEvent e) {
            
        this.addKeyListener(this);
        this.requestFocus();
        
        p.chooseChar();
        
        //Player1
        if(p.getPosY() < hoehe-p.getImage().getHeight(this))
        {
            p.setFreeFall(true);
        }
        else
        {p.setFreeFall(false);
        }
        p.freeFall();
        
         //Player2
        if(p2.getPosY() < hoehe-p2.getImage().getHeight(this))
        {
            p2.setFreeFall(true);
        }
        else
        {p2.setFreeFall(false);
        }
        p2.freeFall();
        
         //Player3
        if(p3.getPosY() < hoehe-p3.getImage().getHeight(this))
        {
            p3.setFreeFall(true);
        }
        else
        {p3.setFreeFall(false);
        }
        p3.freeFall();
        
        
        p.move();
        if(p.getPlayers() >= 2)
        {
        p2.move2();
        }
        if(p.getPlayers() >= 3)
        {
        p3.move3();
        }
        
        repaint();
    }

Hier die Exception:
Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
at java.awt.AWTEventMulticaster.keyPressed(AWTEventMulticaster.java:232)
...... (die setzt sich so 100erte zeilen lang fort aber nicht nur mit keyPressed sondern auch mit released und typed)
 
Zuletzt bearbeitet von einem Moderator:
poste ein Testprogramm,
vielleicht ist nur das späte requestFocus(); nötig?
auch das könnte einmal am Anfang reichen, aber erst nach setVisible(true);
 
poste ein Testprogramm,
vielleicht ist nur das späte requestFocus(); nötig?
auch das könnte einmal am Anfang reichen, aber erst nach setVisible(true);

Danke durch deiner Hilfe und meiner Vermutung hat es funktioniert.:toll:

Lösung:
Ich habe das this.requestFocus(); einfach in der ActionPerformed gelassen und das this.addKeyListener(this); in den Konstruktor ans Ende gegeben
Früher habe ich beide in den Konstruktor geben, dadurch hat es nicht funktioniert.
 

Zurück
Oben