Bin newbie und finde den Fehler net
LittleWulf
- java
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)
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
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
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
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
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
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,
Es ist m.E. NICHT Aufgabe eines Compilers, anstelle fehlerhaften Codes irgendwelchen anderen Code einzubauen und diesen zu compilieren.
cu,
Andreas
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
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
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