Cannot instantiate the type ActionListener

  • Hallo...

    Offensichtlich gibt es noch immer einige grundlegende Dinge, die ich in Java noch nicht verstanden habe.. Beispielsweise jammert Eclipse im Folgenden Codebeispiel mit der Info "Cannot instantiate the type ActionListener" und markiert mir dabei

    new ActionListener(this));


    Weiss jemand, warum dies so ist??

    lg,
    - alex


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

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


    public class Gui implements ActionListener{



    public void guiStart() {

    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");
    }

    }

  • ActionListener ist ein Interface, oder?

    Interfaces sind abstrakte Datentypen. Du kannst keine Instanzen von Interfaces direkt erzeugen. Du musst eine Klasse schreiben, die das Interface implementiert.
    Die Objekte von der Klasse kannst Du dann überall dort benutzen, wo ein Objekt mit dem Interface verlangt wird.


  • Offensichtlich gibt es noch immer einige grundlegende Dinge, die ich in Java noch nicht verstanden habe..

    Das willst Du jetzt vermutlich nicht hoeren, aber Du solltest Dir wirklich ersteinmal ein gutes Buch schnappen und diese Grundlagen lernen. Dann wird Dein Programm wesentlich schneller fertig als wenn Du einfach so im Dunkeln stocherst und ab und zu hier ein paar Fragen stellst.

    die klasse, die das interface implementiert, hab ich ja geschrieben. es ist die klasse selbst.

    public class Gui implements ActionListener

    Wenn Gui ein ActionListener ist, und die Methode JButton.addActionListener() eine Referenz auf einen ActionListener erwartet, dann uebergibst Du die Referenz die Instanz von Gui einfach an die Methode.

    Code
    button.addActionListener(this);

    Was Du geschrieben hast:

    Code
    button.addActionListener(new ActionListener(this));

    versucht eine Instanz von dem Interface ActionListener zu machen, und der einen weiteren ActionListener als Argument zu uebergeben. Das wuerde nur gehen, wenn ActionListener eine konkrete Implementierung waehre, die einen Konstruktor besitzt, der ein Objekt vom Typ ActionListener als Parameter nimmt:

    Code
    class ActionListener{
      public ActionListener(ActionListener listener){
        ...
      }
    }

    Das ist aber hier nicht der Fall. Siehe hierzu http://www.informatik-forum.at/showpost.php?p=138078&postcount=3

    [/code]

  • ich hab eh ein gutes buch ;) ich sollte es nochmals lesen!! und werd ich auch gleich machen. trotzdem danke für die info!!!!!!!!! schönes we!


    +danke!

    button.addActionListener(new ActionListener(this));
    das ist mir klar!! dummer fehler! (ich hab nämlich vorher einen eigenen listener geschrieben und dann es aber doch so geändert, dass meine klasse selbst die methode implementiert und einfach nur mit "this" ersetzt.

Jetzt mitmachen!

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