Wie KeyListener adden?

Anto

Aktives Mitglied
Java:
class A {

public A {
}


}


class B implements KeyListener{

private A a;

private B(A x){

this.a = x;
a.addKeyListener(this);

}


public static void main(final String[] args) {
            
                
		A x = new A();
                B b = new B(x);
                
                
	}

}



Der Grundgedanke: Ich erzeuge in B, wo meine Main steht, ein Objekt der Klasse A und möchte diesem Objekt einen KeyListener verpassen - und zwar von B aus, da a auf B keinen Zugriff hat.
Der addBefehl wirft keinen Fehler, allerdings eine Checkstylewarnung: Leaking this in Construktor.
Wie korrigiere ich das, bzw. ist meine Lösung von Anfang an grundfalsch?

Grüße

Anto
 
S

SlaterB

Gast
nein, es bedeutet (gerade selber nachgeschlagen, alles im Internet zu finden ;) ) dass this nicht im Konstruktor an wer weiß wen übergeben werden sollte, das Objekt ist noch nicht voll initialisiert, besonders schlimm wird das ja mit weiterer Vererbung,

in diesem Fall immer noch ungefährlich, allgemein durchaus eine schlechte Variante,
bei mir würde diese Meldung aber ziemlich oft auftauchen..

die Alternative wäre, nach Ende des Konstruktors, z.B. in der main-Methode, a.addKeyListener(b); aufzurufen,
das spart dann auch die Übergabe an B, sofern nicht aus anderem Grund nötig
 
B

bygones

Gast
taucht auch auf, wenn man eine vererbare klasse hat, die im Konstruktor eine vererbare Methode aufruft.

Wie schon gesagt, das Problem ist, dass die Gefahr droht, dass jemand etwas in der Methode macht mit einem Objekt, was noch nicht vollstaendig initalisiert ist.

Daher sollte man das immer vermeiden....
 

Anto

Aktives Mitglied
Slater was Du meintest habe ich probiert, dann springt allerdings der KeyListener gar nicht an, also auch ein println("Hallo") würde nicht funktionieren.
 
S

SlaterB

Gast
und ging es vorher mit this?
allgemein kann das viele Ursachen haben, ein vollständiges Testprogramm oder jede Zeile mehr Code wäre hilfreich
 

Anto

Aktives Mitglied
Das einzige was funktioniert ist IN A reinzuschreiben: this.addKeyListener(new B (this));

Das ist die einzige Methode die ich bisher kenne die anspringt und das ist wohl kaum sinnvoll.
 

Anto

Aktives Mitglied
Ich habe es jetzt nochmal umgeschrieben habe aber immer noch dasselbe Problem:

Ich habe eine Klasse 1 die die mainMethode enthält.
In der mainMethode wird ein Objekt der Klasse 2 erzeugt.
Klasse 2 implementiert KeyListener.
Klasse zwei erzeugt außerdem ein Objekt der Klasse 3.

Mit welchem Befehl kann ich nun an das Objekt der Klasse 3 einen KeyListener dranhängen? Ich habe jetzt schon bestimmt 15 mögliche Kombinationen probiert, ein paar davon kompilieren, aber bei keinem springt der Listener dann auch an.
 

Anto

Aktives Mitglied
Den KeyListener adden will ich aber doch aus Klasse 2!

Java:
class Main {public static void main(final String[] args) {

Con c = new Con():


}


}


class Con implements KeyListener {

public Con () {}

Fr f = new Fr();


}


Class Fr extends JFrame{

public Fr () {}


}





Warum soll ich da mehr Code bringen, es existiert überhaupt noch nicht mehr Code (naja, bis auf die DummyMethoden KeyTyped usw...und darin halt ein Printbefehl.

Was ich nun möchte, ist, dass Con selbst an f einen Listener dranhängt, denn nach unserer Vorgabe muss es der Controller sein, der den Listener an den Frame hängt. Und ich finde den Befehl dafür nicht.
 

Anto

Aktives Mitglied
So, dann nochmal vollständiger Code, so wie er bei mir im Programm (Testprojekt) steht:


Java:
package testkey;

/**
 *
 * @author admin
 */
public class Testkey {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Lis lis = new Lis();
    }
}
package testkey;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

/**
 *
 * @author admin
 */
class Lis implements KeyListener{
    
    Feld f = new Feld();
    
    
    
    public Lis(){
    }

    @Override
    public void keyTyped(KeyEvent e) {
        System.out.println("Hallo");
    }

    @Override
    public void keyPressed(KeyEvent e) {
          System.out.println("Hallo");
    }

    @Override
    public void keyReleased(KeyEvent e) {
         System.out.println("Hallo");
    }
    
    
    
}
package testkey;

import javax.swing.JFrame;

/**
 *
 * @author admin
 */
class Feld extends JFrame{
    
    public Feld() {}
    
    
    
}


Mit welchem Befehl hänge ich jetzt an f einen KeyListener? Ist das Problem wirklich so unlösbar bzw. die Implementation so schlecht?
 

Kevin94

Top Contributor
Java:
Feld f;
    public Lis()
    {
         f=new Feld();
         f.addKeyListener(this);
    }

Du musst allerdings beachten, das blos weil du an nem Frame einen KeyListener angemeldest hast, dessen Methoden nicht bei jedem Tastendruck aufgerufen werden. Das Frame muss den Fokus haben.

Wenn das nicht klappt probiers mal mit nem Textfeld. Wenn dann in dem Textfeld Text erscheint und deinen Methoden nicht aufgerufen werden solltest du dir Sorgen machen.
 

Anto

Aktives Mitglied
Das war meine ursprüngliche Lösung, das ist aber "verboten" weil ich im Konstruktor nicht auf this referenzieren darf, es kommt auch die Warnung "leaking this in constructor".

Das heisst ich muss das irgendwo anders als im Konstruktor von Lis machen. Wo?
 

Kevin94

Top Contributor
das ist nicht "verboten", sondern du wirst blow gerwarnt das du nicht gedankenlos this an irgendwelche Methoden übergeben sollst. Die alternative währe, wie schon gesagt beide Objecte in der main zu erstellen:
Java:
Feld f=new Feld();
Lis lis=new Lis();
f.addKeyListener(lis);
 

Anto

Aktives Mitglied
Nun ist aber Lis mein Kontroller, ist es bei Model View Control nicht eigentlich üblich, dass der Controller die View erzeugt?

Und: bei beiden Varianten muss doch noch irgendetwas anderes Fehlen, denn der Listener springt jeweils nicht an?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Developer_X JFrame soll KeyListener adden Java Basics - Anfänger-Themen 32
richis-fragen GlassPane mit KeyListener Java Basics - Anfänger-Themen 1
P Wie kann ich meine Keylistener Klasse unterscheiden lassen, von welcher "Quelle" der Input kommt? Java Basics - Anfänger-Themen 2
B Bild per KeyListener drehen Java Basics - Anfänger-Themen 1
javalux123 Keylistener auf andere Fenster Java Basics - Anfänger-Themen 3
F Problem mit KeyListener in kombination mit dem ActionListener Java Basics - Anfänger-Themen 4
M KeyListener reagiert nicht Java Basics - Anfänger-Themen 4
M Mit KeyListener Farbe von Label ändern Java Basics - Anfänger-Themen 13
N Java Keylistener Java Basics - Anfänger-Themen 2
B KeyListener funkioniert nicht Java Basics - Anfänger-Themen 2
F KeyListener Java Basics - Anfänger-Themen 3
S Erste Schritte 2D Grafik Probleme mit KeyListener. Java Basics - Anfänger-Themen 18
G KeyListener und JButton vertragen sich nicht Java Basics - Anfänger-Themen 1
J-Gallus Keylistener verstehen Java Basics - Anfänger-Themen 17
S Keylistener Java Basics - Anfänger-Themen 16
S Keylistener im Grafikfenster Java Basics - Anfänger-Themen 3
H Mouse- und KeyListener Probleme? Java Basics - Anfänger-Themen 5
N KeyListener in Thread Java Basics - Anfänger-Themen 0
LexeB4F for schliefe in KeyListener Java Basics - Anfänger-Themen 3
R KeyListener auslagern Java Basics - Anfänger-Themen 3
J KeyListener aus anderer Klasse bereitet Probleme Java Basics - Anfänger-Themen 1
Z KeyListener funktioniert nicht? Weshalb? Java Basics - Anfänger-Themen 8
T KeyListener Java Basics - Anfänger-Themen 2
Gfreak23 Input/Output KeyListener funktioniert auf Laptop nicht allerdings auf Tower-PC Java Basics - Anfänger-Themen 8
J KeyListener - mal wieder... Java Basics - Anfänger-Themen 2
TheSorm KeyListener Problem Java Basics - Anfänger-Themen 4
M KeyListener Java Basics - Anfänger-Themen 3
S KeyListener/ActionListener/paint()/repaint() Java Basics - Anfänger-Themen 3
D KeyListener nicht mehr aktiv nach ActionPerformed Java Basics - Anfänger-Themen 2
C Mehrere Tasten beim KeyListener gleichzeitig lesen Java Basics - Anfänger-Themen 2
L Input/Output Java 3D mit KeyListener Java Basics - Anfänger-Themen 1
S KeyListener reagiert nicht. Java Basics - Anfänger-Themen 4
L KeyListener ohne textfeld Java Basics - Anfänger-Themen 4
J KeyListener,MouseListener,MouseMotionListener und static Java Basics - Anfänger-Themen 7
P Klassen Bei KeyEvent in KeyListener den Tastendruck abbrechen Java Basics - Anfänger-Themen 5
B KeyListener als allgemeine Methode Java Basics - Anfänger-Themen 5
H KeyListener auf ganzes Fenster setzen Java Basics - Anfänger-Themen 14
0 KeyListener ausserhalb der Applikation Java Basics - Anfänger-Themen 5
G KeyListener Java Basics - Anfänger-Themen 4
D KeyListener und ActionListener Problem Java Basics - Anfänger-Themen 6
J KeyListener funtioniert nicht! Java Basics - Anfänger-Themen 3
J KeyListener Java Basics - Anfänger-Themen 11
P Input/Output KeyListener reagiert nicht Java Basics - Anfänger-Themen 4
G KeyListener, Fokus Java Basics - Anfänger-Themen 8
K Input/Output KeyListener funktioniert nicht Java Basics - Anfänger-Themen 3
A Input/Output Keylistener Aktiv schalten Java Basics - Anfänger-Themen 8
J keyListener - Genau 1 Aktion soll bei 1 Tastenausdruck ausgeführt werden Java Basics - Anfänger-Themen 11
S KeyListener Java Basics - Anfänger-Themen 2
A Erste Schritte Problem mit KeyListener Java Basics - Anfänger-Themen 6
Maxim6394 KeyListener geht nicht Java Basics - Anfänger-Themen 15
Maxim6394 KeyListener funktioniert nicht Java Basics - Anfänger-Themen 20
U KeyListener StackOverflowError Java Basics - Anfänger-Themen 2
W KeyListener auf Applet mit Runnable Java Basics - Anfänger-Themen 4
M Apfel-Spiel KeyListener Java Basics - Anfänger-Themen 33
J KeyListener (keyTyped) funktioniert nicht Java Basics - Anfänger-Themen 9
Luk10 KeyListener Java Basics - Anfänger-Themen 13
S KeyListener aus anderer Klasse hinzufügen Java Basics - Anfänger-Themen 19
P KeyListener im Applet Java Basics - Anfänger-Themen 2
S KeyListener-Anwendung Java Basics - Anfänger-Themen 7
O KeyListener funktioniert nur wenn er will Java Basics - Anfänger-Themen 2
A KeyListener funzt ned Java Basics - Anfänger-Themen 6
D KeyListener, Unterscheidung Groß/Kleinbuchstaben Java Basics - Anfänger-Themen 3
S KeyListener als class? Java Basics - Anfänger-Themen 4
F Applet mit KeyListener, "Alt"-Taste und Konflikt mit Browser Java Basics - Anfänger-Themen 2
P KeyListener Java Basics - Anfänger-Themen 2
S KeyListener für einfaches Programm Java Basics - Anfänger-Themen 3
S KeyListener aktiv auch wenn minimiert? Java Basics - Anfänger-Themen 4
Z Globaler Keylistener Java Basics - Anfänger-Themen 2
V KeyListener Beispiel Java Basics - Anfänger-Themen 13
T canvas killt KeyListener Java Basics - Anfänger-Themen 2
Das Brot Nach .add(JRadioButton) funktioniert der KeyListener nicht mehr Java Basics - Anfänger-Themen 2
J Keylistener aber wie jTextField auswahl? Java Basics - Anfänger-Themen 3
D KeyListener, nichts passiert Java Basics - Anfänger-Themen 6
U ActionListener und KeyListener - KeyListener funktioniert nicht Java Basics - Anfänger-Themen 2
D Keylistener zu langsam Java Basics - Anfänger-Themen 7
C Problem mit JPopupMenu, JTextField und Keylistener Java Basics - Anfänger-Themen 2
G Keylistener in einer Schleife Java Basics - Anfänger-Themen 9
M problem mit keylistener Java Basics - Anfänger-Themen 2
M TabbedPane: KeyListener funktioniert nicht mehr Java Basics - Anfänger-Themen 8
N KeyListener ohne GUI? Java Basics - Anfänger-Themen 5
M KeyListener Java Basics - Anfänger-Themen 3
T KeyListener wird nicht ausgelöst Java Basics - Anfänger-Themen 6
O KeyListener Java Basics - Anfänger-Themen 8
Developer_X KeyListener ohne JFrame Java Basics - Anfänger-Themen 13
H KeyListener Java Basics - Anfänger-Themen 4
Developer_X KeyListener Actions (hat mit Java3D zu tun) Java Basics - Anfänger-Themen 20
H KeyListener funktioniert nicht Java Basics - Anfänger-Themen 8
F Keylistener Java Basics - Anfänger-Themen 12
hdi KeyListener : keyTyped() nicht nutzbar? Java Basics - Anfänger-Themen 1
StickToFreak Runnable + KeyListener? Java Basics - Anfänger-Themen 32
dl85hej Keylistener Java Basics - Anfänger-Themen 16
H KeyListener will nicht reagieren Java Basics - Anfänger-Themen 5
R Fehlersuche - KeyListener, KeyAdaper - Nichts Klappt! Java Basics - Anfänger-Themen 2
G Prob. mit KeyListener und Unterklasse Java Basics - Anfänger-Themen 5
G Keylistener nur besimmte Zeichen zulassen Java Basics - Anfänger-Themen 8
hdi keylistener hat keinen fokus oder: listener ohne frame? Java Basics - Anfänger-Themen 10
A KeyListener funktioniert nicht Java Basics - Anfänger-Themen 7
D KeyListener Java Basics - Anfänger-Themen 7
B Keylistener auf JSpinner reagiert nicht? Java Basics - Anfänger-Themen 3
G KeyListener für die Taste "/" Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben