1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Cannot use this in a static context

  • sommeralex
  • 13. Oktober 2007 um 17:57
  • Unerledigt
  • sommeralex
    11
    sommeralex
    Mitglied
    Punkte
    1.325
    Beiträge
    188
    • 13. Oktober 2007 um 17:57
    • #1

    Hallo..

    Nun hab ich mein Programm umgeschrieben, und ärger mich über ein 2. prinzipielles Unverständnis über Objektorientierte Programmierung:

    button.addActionListener(new ActionListener(this));

    Eclipse meckert hier, dass er "this" nicht in einem statischen context nutzen kann.

    wieso ist das so?

    (danke...ist mir eh peinlich, es nicht mehr zu wissen)


    import java.awt.Component;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowListener;

    import javax.swing.JButton;
    import javax.swing.JFrame;


    public class FrameBsp implements ActionListener{

    /**
    * @param args
    */


    public static void main(String[] args) {


    JFrame frame = new JFrame("Mein Fenster");

    //2. Optional: What happens when the frame closes?
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    //JButton startButton = new JButton("ok");

    JButton button = new JButton("ok");

    frame.getContentPane().add(new JButton("OK"));

    button.addActionListener(new ActionListener(this));


    //4. Size the frame.
    frame.pack();

    //5. Show it.
    frame.setVisible(true);


    }

    public void actionPerformed(ActionEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println("OK");
    }

    }

    }

  • lerod
    13
    lerod
    Mitglied
    Reaktionen
    5
    Punkte
    1.620
    Beiträge
    315
    • 13. Oktober 2007 um 18:15
    • #2

    this beschreibt das Objekt. Statische Methoden kommen auch ohne dessen Objekt, in dem es deklariert und implementiert wird, aus.

    Der Verweis in dieser statischen Methode auf das this Objekt wird also fehlschlagen, weil (noch) kein Objekt existiert.

    Ich hoffe, das war verständlich erklärt.

  • sommeralex
    11
    sommeralex
    Mitglied
    Punkte
    1.325
    Beiträge
    188
    • 13. Oktober 2007 um 19:15
    • #3

    schauen wir mal, ob ich es verstanden habe :)

    (ich dachte immer, this meint die klasse, bzw das objekt der klasse, in dem es verwendet wird?)

    also, der "scope" von "this" geht nicht über die methode, in der es verwendet wird, hinaus. richtig?

    wenn ich also this im konstruktor verwenden würde, würde es sich auf das initialisierte objekt beziehen, dass durch den aufruf dieses konstruktors erschaffen wird.


    wenn ich aber this in einer statischen methode aufrufe, würde es sich auf das statische objekt beziehen, - da meine klasse aber nicht statisch ist, bzw ihr das "static class" fehlt, könnte der compiler das zur statischen methode gehörende statische objekt nicht finden.

    richtig?

  • lerod
    13
    lerod
    Mitglied
    Reaktionen
    5
    Punkte
    1.620
    Beiträge
    315
    • 13. Oktober 2007 um 19:24
    • #4
    Zitat von sommeralex


    (ich dachte immer, this meint die klasse, bzw das objekt der klasse, in dem es verwendet wird?)


    Ist auch richtig so.

    Zitat von sommeralex


    also, der "scope" von "this" geht nicht über die methode, in der es verwendet wird, hinaus. richtig?


    Das versteh ich nicht ganz, was du damit meinst. This bezieht sich auf das ganze Objekt und ist in jeder Methode des instanzierten Objektes verwendbar. Siehe dazu auch dein vorheriges & nachfolgendes Kommentar.

    Zitat von sommeralex


    wenn ich also this im konstruktor verwenden würde, würde es sich auf das initialisierte objekt beziehen, dass durch den aufruf dieses konstruktors erschaffen wird.



    Und zuletzt ...

    Zitat von sommeralex


    wenn ich aber this in einer statischen methode aufrufe, würde es sich auf das statische objekt beziehen, - da meine klasse aber nicht statisch ist, bzw ihr das "static class" fehlt, könnte der compiler das zur statischen methode gehörende statische objekt nicht finden.

    richtig?



    Auch richtig.

  • Dimitrij
    7
    Dimitrij
    Mitglied
    Reaktionen
    12
    Punkte
    437
    Beiträge
    73
    • 13. Oktober 2007 um 19:55
    • #5
    Java
    import java.awt.Component;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowListener;
    
    
    import javax.swing.JButton;
    import javax.swing.JFrame;
    
    
    class FrameBsp implements ActionListener{
    
    
    /**
    * @param args
    */
    
    
    
    
    
    
    public static void main(String[] args) {
    
    
    
    
    
    
    JFrame frame = new JFrame("Mein Fenster");
    
    
    //2. Optional: What happens when the frame closes?
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    
    //JButton startButton = new JButton("ok");
    
    
    JButton button = new JButton("ok");
    
    
    frame.getContentPane().add([B]button[/B]);
    
    
    button.addActionListener([B]new FrameBsp()[/B]);
    
    
    
    
    //4. Size the frame.
    frame.pack();
    
    
    //5. Show it.
    frame.setVisible(true);
    
    
    
    
    
    
    }
    
    
    public void actionPerformed(ActionEvent arg0) {
    // TODO Auto-generated method stub
    System.out.println("OK");
    }
    
    
    }
    Alles anzeigen

    de.lernu.net, lingwadeplaneta.info

  • sommeralex
    11
    sommeralex
    Mitglied
    Punkte
    1.325
    Beiträge
    188
    • 13. Oktober 2007 um 20:00
    • #6

    ad scope:

    naja, ganz einfach: this bezieht sich auf das instaniierte objekt (normalerweise). this könnte sich aber auch auf ein statisches objekt/klasse beziehen. jenachdem, wo ich es aufrufe (scope)

    mein problem entsteht ja während dem aufruf einer statischen methode. ich will in einer statischen methode ein instanziiertes objekt mit "this" verwenden. da die statische methode aber eben statisch ist, und nicht "instanziierter teil des instanziierten objektes", tut sich diese statische methode schwer, irgendeine instanz "ihrer" klasse zu verwenden.

    aber ich glaub, jetzt kenn ich mich selbst nicht mehr aus und der satz ist auch nicht deutsch :eek2:

  • lerod
    13
    lerod
    Mitglied
    Reaktionen
    5
    Punkte
    1.620
    Beiträge
    315
    • 13. Oktober 2007 um 21:08
    • #7

    Egal, um es auf dein Problem zu konkretisieren. Dimitrij hats ja schon angedeutet.

    Du verwendest das this in der main Methode! In der Main Methode gibt es aber kein this. Du mußt die entsprechende Klasse angeben, die die Actions abarbeiten soll. Verständlich?

  • sommeralex
    11
    sommeralex
    Mitglied
    Punkte
    1.325
    Beiträge
    188
    • 15. Oktober 2007 um 23:27
    • #8

    ja, es ist verständlich - sorry fürs späte antworten!

    auf alle fälle, vielen dank!!!!!!!!!

  • Maximilian Rupp 27. Dezember 2024 um 12:04

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung