LittleWulf: Bin newbie und finde den Fehler net

Hi Leutz,
kan mir da jemand helfen?

package Anfang;

import java.awt.*;
import java.awt.event.*;
/**
 * @author LittleWulf
 *
 */
public class Grafiken extends Frame implements ActionListener {
Button bt1, bt2;
Canvas cv;

public Grafiken (){
cv = new Canvas();
   cv.setBounds(50,100,200,300);
   cv.setBackground(Color.yellow);
   add (cv);
setLayout (new FlowLayout());
bt1 = new Button ("Kreis");
  add (bt1);
bt1.addActionListener (this);
bt2 = new Button ("Gerade");
  add (bt2);
bt2.addActionListener (this);
  initComponenets ();
}
private void initComponenets ()
 {
  addWindowListener (new WindowAdapter (){
   public void windowClosing (WindowEvent ev){
    exitForm(ev);}});
  pack ();}

private void exitForm (WindowEvent ev) {
  System.exit(0);}

public static void main(String[] args) {
  Grafiken toll = new Grafiken ();
    toll.setLocation (100,100);
    toll.setSize (350,380);
    toll.show ();
 }

public void kreis(int xm,int ym,int r){
 Graphics  g = cv.getGraphics();
    g.setColor(Color.white);
 int x1 = xm - r;
 int y1 = xm - r;
    g.drawOval(x1,y1,2*r,2*r);
    g.dispose();}

public void maleGerade (int x1,int y1,int x2,int y2){
 Graphics g = cv.getGraphics();
  g.setColor(Color.red);
  for(int i = 1;i<10;i++)
  g.drawLine(i*x1,i*y1,x2,y2);
  g.dispose();}

public void actionPerfomed(ActionEvent e){
 if(e.getSource()==bt1) kreis(50,20,100);
 if(e.getSource()==bt2) maleGerade(10,20,100,200);
}
}

Und Fehler zeigt er des:

java.lang.Error: Unresolved compilation problem:
 Class must implement the inherited abstract method ActionListener.actionPerformed(ActionEvent)

at Anfang.Grafiken.actionPerformed(Grafiken.java:13)
 at java.awt.Button.processActionEvent(Unknown Source)
 at java.awt.Button.processEvent(Unknown Source)
 at java.awt.Component.dispatchEventImpl(Unknown Source)
 at java.awt.Component.dispatchEvent(Unknown Source)
 at java.awt.EventQueue.dispatchEvent(Unknown Source)
 at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
 at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
 at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
 at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
 at java.awt.EventDispatchThread.run(Unknown Source)

  1. Hallo,

    ich kürze mal auf die relevanten Zeilen:

    public void actionPerfomed(ActionEvent e){
    if(e.getSource()==bt1) kreis(50,20,100);
    if(e.getSource()==bt2) maleGerade(10,20,100,200);
    }

    java.lang.Error: Unresolved compilation problem:
    Class must implement the inherited abstract method ActionListener.actionPerformed(ActionEvent)

    Noch mehr gekürzt:

    public void actionPerfomed(ActionEvent e){
    ActionListener.actionPerformed(ActionEvent)

    Und noch mehr:

    actionPerfomed(ActionEvent)
    actionPerformed(ActionEvent)

    Also ein simpler Schreibfehler.

    Gruß
    Slyh

    1. Hi,

      java.lang.Error: Unresolved compilation problem:
      Class must implement the inherited abstract method ActionListener.actionPerformed(ActionEvent)
      Also ein simpler Schreibfehler.

      Was mich dabei wundert: das hätte doch eigentlich schon beim Compilieren zu einem Fehler führen müssen - hier gibt es aber einen Runtime-Error ...

      cu,
      Andreas

      --
      Warum nennt sich Andreas hier MudGuard?
      Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
      1. Hallo,

        Was mich dabei wundert: das hätte doch eigentlich schon beim Compilieren zu einem Fehler führen müssen - hier gibt es aber einen Runtime-Error ...

        Das ist leicht erklärt.
        Ich nehme an, daß der OP Eclipse als Entwicklungsumgebung verwendet.
        Eclipse kann auch Klassen kompilieren, die Syntaxfehler enthalten.
        Kurz gesagt ersetzt Eclipse alle Methoden, die einen Fehler enthalten,
        mit ungefähr folgendem Code:

        public void blub()
        {
            throw new Error("Unresolved compilation problem: \n\tType mismatch: cannot convert from int to String\n");
        }

        Nettes Feature, übrigens. Also, das Kompilieren von fehlerhaften Klassen
        zu erlauben. Brauche ich andauernd.

        Gruß
        Slyh

        1. Hi,

          Eclipse kann auch Klassen kompilieren, die Syntaxfehler enthalten.

          Argh. So ein Schei...
          Das ist schon mal ein Grund, Eclipse nicht zu verwenden und bei Netbeans zu bleiben ...

          cu,
          Andreas

          --
          Warum nennt sich Andreas hier MudGuard?
          Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
          1. Hallo,

            Eclipse kann auch Klassen kompilieren, die Syntaxfehler enthalten.

            Argh. So ein Schei...

            Ach ja? Das magst du sicherlich begründen.

            Mein abschließender Satz des vorausgehenden Postings war durchaus
            ernst gemeint.

            Vielleicht als kleine Hintergrundinfo:
            Natürlich wird die Klasse mit einem fetten roten "X" gekennzeichnet,
            falls sie Fehler enthält. Wenn eine Methode Fehler enthält, wird sowohl
            die Methode als auch die Klasse mit dem roten "X" gekennzeichnet.
            Außerdem wird natürlich der Grund für das "X" im Problem-View angezeigt.
            Und selbstverständlich kann man auf die Ausgabe der Runtime-Exception
            in der Konsole klicken, um sofort an die Stelle des fehlerhaften
            Codes zu springen.

            Gruß
            Slyh

            1. Hi,

              Natürlich wird die Klasse mit einem fetten roten "X" gekennzeichnet,
              falls sie Fehler enthält. Wenn eine Methode Fehler enthält, wird sowohl
              die Methode als auch die Klasse mit dem roten "X" gekennzeichnet.
              Außerdem wird natürlich der Grund für das "X" im Problem-View angezeigt.

              Naja, wieviel diese tollen roten X bewirken, merkt man ja - LittleWulf hat die Klasse trotzdem ausgeführt, die roten X haben nichts bewirkt.

              Meiner Meinung nach hat ein Compiler die Aufgabe,

              • Code, falls er fehlerfrei ist, zu compilieren
              • falls der Code NICHT fehlerfrei ist, die Fehler zu melden.

              Es ist m.E. NICHT Aufgabe eines Compilers, anstelle fehlerhaften Codes irgendwelchen anderen Code einzubauen und diesen zu compilieren.

              cu,
              Andreas

              --
              Warum nennt sich Andreas hier MudGuard?
              Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
              1. Hallo,

                Naja, wieviel diese tollen roten X bewirken, merkt man ja - LittleWulf hat die Klasse trotzdem ausgeführt, die roten X haben nichts bewirkt.

                Naja, nur weil ein Anfänger im Umgang mit einem Feature Fehler macht,
                bzw. dieses nicht kennt, heißt das nicht, daß ein Feature deshalb
                schlecht ist.
                Übrigens wird vor dem Ausführen des Programms sogar noch explizit
                ein Dialog angezeigt, der den Entwickler fragt, ob er trotz
                vorhandener Fehler das Programm ausführen möchte.
                (Die Anzeige dieses Dialogs kann man natürlich abschalten. Dann sollte
                man aber schon wissen was man tut...)

                Meiner Meinung nach hat ein Compiler die Aufgabe,

                • Code, falls er fehlerfrei ist, zu compilieren
                • falls der Code NICHT fehlerfrei ist, die Fehler zu melden.

                Eclipse meldet die Fehler doch. Sowohl während der Entwicklung, als
                auch vor dem Start des Programms, als auch während der Ausführung
                des Programms, wenn fehlerhafter Code ausgeführt werden soll.

                Wie gesagt, ich brauche das Feature ständig. Deshalb war deine
                Reaktion gänzlich unbegründet.

                Es ist m.E. NICHT Aufgabe eines Compilers, anstelle fehlerhaften Codes irgendwelchen anderen Code einzubauen und diesen zu compilieren.

                Das ist jetzt der falsche Betrachtungswinkel.
                Vielmehr ist es ausgesprochen praktisch, wenn Klassen, die Syntaxfehler
                enthalten, trotzdem ausgeführt werden können. Schon alleine weil es
                das nervige Auskommentieren (oder dergleichen) des betreffenden
                fehlerhaften Codes unnötig macht.
                Daß da jetzt intern der Code der Methode durch den Exception-Aufruf
                ersetzt wird, juckt mich nicht die Bohne. Das sehe ich nicht. Ich
                sehe nur, daß die Methode wohl einen Fehler hat.

                Wohlgemerkt: Wir reden hier von der Entwicklungszeit. Natürlich würde
                niemand auf die Idee kommen, eine Anwendung mit Syntaxfehlern auszu-
                liefern.

                Gruß
                Slyh

                1. Hallo Slyh,

                  Ich hab eigentlich nie das Bedürfniss irgendetwas auszuführen, bevor es keine Syntaxfehler mehr enthält. Sinnvoll ist das eigentlich höchstens, wenn man eine Klasse schon testen will, wenn sie einige Schnittstellen noch nicht implementiert hat.

                  Wohlgemerkt: Wir reden hier von der Entwicklungszeit. Natürlich würde
                  niemand auf die Idee kommen, eine Anwendung mit Syntaxfehlern auszu-
                  liefern.

                  Darauf würde ich mich nicht verlassen, wenn man die Anwendung kompilieren kann und sie nicht nach 10 Sekunden abstürzt, wird die unter Garantie irgend jemand ausliefern.
                  Wie haben hier in Stuttgart z.B. neue elektronische Abfahrtsanzeigen für die S-Bahn. Das sieht auch jeden Tag ander aus und man hat durchaus den Eindruck, als ob da noch so manche Platzhaltermethode drin wäre, die irgend einen Error wirft ;-)

                  Grüße

                  Daniel

                  1. Danke für die schnelle und gut erklärte Hilfe. Werde versuchen nicht nochmal wegen einem schreibfehler zu posten.

                    Danke an alle

                    dann noch ein Frohes Fest

                    MFG LittleWulf