Probleme beim Objekte "austauschen".

Kai008

Erfahrenes Mitglied
OK, das ist mir schon peinlich, aber ich finde den Bug einfach nicht.
Ich habe für ein Spiel mehrere KeyListener und Klassen, die per java.awt.Graphics zeichnen.
Z. B. einen für das Spielmenü am Anfang, dann ingame, ingame mit Menü usw. Alle Klassen erben von paint.Paint bzw. keylistener.KeyListener. Außerdem gibt es sie als Klassenvariablen in der die von javax.swing.JFrame erbt.
Mein Plan war, dass ich bei einen "Ortwechsel" einfach die erbenden Klassen heimlich, still und leise austausche:

Java:
public void newKeyListener(keylistener.KeyListener keylistener)
{
	this.removeKeyListener((KeyListener) this.keylistener);
	this.keylistener = keylistener;
	this.addKeyListener((KeyListener) keylistener);
}
public void newPaint(paint.Paint paint)
{
	this.paint = null;
	this.paint = paint;
	this.repaint();
}

Jetzt habe ich aber das Problem, dass das so wirkt, als würden bei einer damit neu erzeugten Instanz einer Klasse diese, UND die vorherige drinnenstehen.
Z. B. bleibt das alte Bild der paint vorhanden, bis ich es mit der neuen Klasse überschreibe. Eben so, als ob die alte Klasse drinnen bleibt und jedes mal vorher abgearbeitet wird.
Und der KeyListener reagiert einen "Ort" weiter auch so, als ob die Taste im vorherigen Bild gedrückt wurde. Da könnte ich es mir noch vorstellen dass das entfernen des KeyListeners so nicht klappt (mache das hier das erste mal), aber das bei der Paint ist mir echt ein Rätsel.
Die Abstract des KeyListeners ist leer, da ich es ja nur verwende um dem selben Variablennamen verwenden zu können. In der der Paint steht nur die Zeile "public abstract void run(java.awt.Graphics g);", diese wird in der public void paint(java.awt.Graphics g) der JFrame-Klasse für die Zeichenaufgaben aufgerufen.

Ich hoffe dass ich das jetzt verständlich erklärt habe, was das Problem ist, und dass mir jemand helfen kann. Ich blicke da echt 0 durch. :confused:
 
Moin,

hast es denn mal step-by-step probiert?
Sprich erst den alten Listener rauswerfen (evt. noch null setzen) und dann testen,
ob noch eine Reaktion kommt.
So wie Du das erklärst, muss er ja irgendwo noch an der Komponente hängen.

Gruß,
Xan
 
Zurück