Wieder mal ein error

hi

also, mein error:

…javac ***.java
***.java:5: actionPerformed(java.awt.event.ActionEvent) in *** cannot implement actionPerformed(java.awt.event.ActionEvent) in java.awt.event.ActionListener; actionPerformed(java.awt.event.ActionEvent) and actionPerformed(java.awt.event.ActionEvent) are static
public class *** extends JFrame implements ActionListener
^
1 error

hm.
also ich hab die fehlermeldung ganz abgeschrieben, wodurch es zu tippfehlern gekommen sein könnte, aber ich hab keine gefunden und im error versucht ungleichheiten zwischen actionPerformed(java.awt.event.ActionEvent) und actionPerformed(java.awt.event.ActionEvent) festzustellen, hab jedoch keine gefunden.
also so einen error hatte ich ncoh nie.

fragen:

was heißt die 5??? ( ***.java: 5 : … )? das ist, glaub ich, bei jedem mal eine andere zahl.
was kann ich gegen diese fehlermeldung tun?/was habe ich falsch gemacht?

thx im vorraus und
cu

Hi.
Die 5 müsste eigentlich die Zeilennummer sein, in der der Fehler beim Compilieren aufgetreten ist. In welcher Datei steht davor angegeben. Was der Fehler aber genau bedeutet, kann ich dir so jetzt auch nicht sagen, dazu müsste ich den Codeausschnitt sehen, dann könnte ich vielleicht helfen.
CU,
Sebastian.

hi

Was der Fehler aber genau bedeutet,
kann ich dir so jetzt auch nicht sagen, dazu müsste ich den
Codeausschnitt sehen, dann könnte ich vielleicht helfen.

**public static void actionPerformed(ActionEvent e) // anfang funktionen der objekte
{
String quelle = e.getActionCommand();

if (quelle.equals(„SENDEN!“))
{
jlabel1.setText(jtextarea0.getText());
}
} // ende funktionen der objekte**

ich hoffe dir hilfts was

also das soll so aussehen:

da hab ich nen jbutton, ne jtextarea (ohne actionlistener *g*), und ein jlabel. wenn man auf den button klickt, der mit SENDEN! beschriftet ist, nimmt das jlabel den inhalt der jtextarea auf. war einfach mal so zum ausprobieren.

Hmm bin mir zwar nicht sicher, aber ich verstehe nicht warum deine Methode als static deklariert ist. Mach das static mal raus und schau ob es geht

Hmm bin mir zwar nicht sicher, aber ich verstehe nicht warum
deine Methode als static deklariert ist. Mach das static mal
raus und schau ob es geht

klar, der compiler geht durch, aber wenn ich dann wenn ichs mit " java" öffne kommt das:

Exception in thread „main“ java.lang.NullPointerException
at java.awt.Container.addImpl(Unknown source)
at java.awt.Container.add(Unknown source)
at ***.(***.java:34)
at ***.main(***.java:55)

tja, was heißt das?
also ich habe alle objekte (buttons, textfields, etc.) am anfang der klasse außerhalb jeder methode mit static deklariert, weil er sonst auch ne ffehlermeldung bringt. hat das was damit zu tun?

cu

Hi!

Hmm bin mir zwar nicht sicher, aber ich verstehe nicht warum
deine Methode als static deklariert ist. Mach das static mal
raus und schau ob es geht

klar, der compiler geht durch, aber wenn ich dann wenn ichs
mit " java" öffne kommt das:

Exception in thread „main“ java.lang.NullPointerException

NullPointerException bedeutet dass du auf ein Objekt zugreifen möchtest für welches keinen zeiger bekannt ist.

at java.awt.Container.addImpl(Unknown source)
at java.awt.Container.add(Unknown source)
at ***.(***.java:34)
at ***.main(***.java:55)

tja, was heißt das?
also ich habe alle objekte (buttons, textfields, etc.) am
anfang der klasse außerhalb jeder methode mit static
deklariert, weil er sonst auch ne ffehlermeldung bringt. hat
das was damit zu tun?

Statische Methoden werden mit der Klassenbezeichnung direkt aufgerufen. z.B. System.out.println

Wenn du nur statische Methoden hast, brauchst du für diese Klasse keinen Konstruktor. Das bedeutet dass du keine Instanz dieser Klasse hast. Da gibt’s denn auch kein „this“. Deshalb sollten deine Attribute auch statisch sein.
Du hast eine Fehlermeldung mit „main“, das könnte also darauf schliessen.
Schick mir doch mal die ganze Klasse per mail, wenn du möchtest, und dann schau ich mal. Damit der Frust mal aufhört und du weiter kommst, gelle?

MfG.
Marc

Hallo!

Nachdem ich alles unten gelesen habe, denke ich, du hast einfach einen Fehler gemacht, den viele Java-Anfänger machen (also nichts schlimmes).

In Java ist die „main“-Methode grundsätzlich als „static“ deklariert. Das heißt aber nicht, dass der Rest deiner Klasse auch statisch sein muss, nur, um innerhalb der „main“-Methode verwendet werden zu können!

Du wirst nämlich eigentlich nie aus „main“ heraus direkt auf die Klasse direkt zugreifen, sondern statt dessen ein neues Objekt davon anlegen:

public class MeineKlasse
{
 // irgendwelche Deklarationen

 // Constructor
 public MeineKlasse()
 {
 // mach was ...
 }

 // irgendwas anderes

 public static void main(String args[])
 {
 MeineKlasse meinObjekt = new MeineKlasse();

 // mach was mit meinObjekt (notfalls eben auch mit
 // mehreren dieser Objekte), aber lass "MeineKlasse"
 // in Ruhe...
 }
}

In „main“ legst du also ein neues Objekt deiner Klasse an, mit dem du arbeitest, denn so würdest du die Klasse ja auch „von außen“ her benutzen, also von anderen Objekten aus, nicht wahr?

Die „main“-Methode dient einerseits zum Starten eines Programmes, wird aber andererseits meistens zum Testen einer Klasse benutzt, also, um beim Entwickeln mal schnell eine beliebige Klasse starten zu können. Die „main“-Methode gibt dann irgendwas aus, woraus ich darauf schließen kann, dass die Klasse korrekt funktioniert.

Wenn du deine Klasse nach obigem Schema nochmal gründlich durchgehst, dann solltest du eigentlich alles zum Laufen bringen können.

Viel Erfolg!

Gruß,
Stefan :smile:

Hi!

Hmm bin mir zwar nicht sicher, aber ich verstehe nicht warum
deine Methode als static deklariert ist. Mach das static mal
raus und schau ob es geht

klar, der compiler geht durch, aber wenn ich dann wenn ichs
mit " java" öffne kommt das:

Exception in thread „main“ java.lang.NullPointerException

NullPointerException bedeutet dass du auf ein Objekt zugreifen
möchtest für welches keinen zeiger bekannt ist.

at java.awt.Container.addImpl(Unknown source)
at java.awt.Container.add(Unknown source)
at ***.(***.java:34)
at ***.main(***.java:55)

tja, was heißt das?
also ich habe alle objekte (buttons, textfields, etc.) am
anfang der klasse außerhalb jeder methode mit static
deklariert, weil er sonst auch ne ffehlermeldung bringt. hat
das was damit zu tun?

Statische Methoden werden mit der Klassenbezeichnung direkt
aufgerufen. z.B. System.out.println

Wenn du nur statische Methoden hast, brauchst du für diese
Klasse keinen Konstruktor. Das bedeutet dass du keine Instanz
dieser Klasse hast. Da gibt’s denn auch kein „this“. Deshalb
sollten deine Attribute auch statisch sein.
Du hast eine Fehlermeldung mit „main“, das könnte also darauf
schliessen.
Schick mir doch mal die ganze Klasse per mail, wenn du
möchtest, und dann schau ich mal. Damit der Frust mal aufhört
und du weiter kommst, gelle?

also damit wir schneller vorankommen sollten ihn, wenn ihn schon jemand ganz sieht, jeder sehen. also hier der code: (so ungern ich das auch tue aber mir bleibt keine andere wahl:smile:
**import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class oli extends JFrame implements ActionListener
{ // anfang klasse oli

private static JLabel jlabel0, jlabel1; //Objekte
private static JTextArea jtextarea0;
private static JButton jbutton0; //Objekte ende

oli(String title) // anfang konstruktor
{
super(title);

try // LookAndFeel erzwingen
{
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); //Platform schreibtMAN mitEINEM t
}
catch(Exception exc)
{
System.out.print(„Fehler bei UIManager.getCrosblablabla ()); \n“);
}

JPanel jpanel0 = new JPanel();
jpanel0.setLayout(new GridLayout(4, 1, 5, 5));
setContentPane(jpanel0); // ZELLEN && GridLayout

JPanel zelle0 = new JPanel();
JPanel zelle1 = new JPanel();
JPanel zelle2 = new JPanel(); // implementierung der objekte in die
JPanel zelle3 = new JPanel(); //
zelle0.add(jlabel0); // Zellen.
zelle1.add(jlabel1);
zelle2.add(jtextarea0);
zelle3.add(jbutton0);
// Die „ADDUNG“ der Action-Listener.
jbutton0.addActionListener(this); //…

} // ende konstruktor

public void actionPerformed(ActionEvent e) // anfang funktionen der objekte
{
String quelle = e.getActionCommand();

if (quelle.equals(„SENDEN!“))
{
jlabel1.setText(jtextarea0.getText());
}
} // ende funktionen der objekte

public static void main(String [] xxxyy) // anfang main
{
oli fenster = new oli(„chat v 0.11beta“);
fenster.pack();
fenster.show();

jlabel0.setText(„mein 1st chat… :“);
jlabel1.setText(„dynamisches Textfeld“);
jbutton0.setText(„SENDEN!“);
System.gc();

} // ende main

} // ende klasse oli**
ok, is n bissle unübersichtlich, aber egal.

bitte helft mir.

cu

HI

Nachdem ich alles unten gelesen habe, denke ich, du hast
einfach einen Fehler gemacht, den viele Java-Anfänger machen
(also nichts schlimmes).

Ja, ich bin Anfänger, aber wenn ich euch verrate, wie alt ich bin, lacht ihr euch tot!

Du wirst nämlich eigentlich nie aus „main“ heraus direkt auf
die Klasse direkt zugreifen, sondern statt dessen ein neues
Objekt davon anlegen:

Das habe ich noch nicht ganz verstanden. Könntest du mir das vielleicht nochmal genauer erklären?

In „main“ legst du also ein neues Objekt deiner Klasse an, mit
dem du arbeitest, denn so würdest du die Klasse ja auch „von
außen“ her benutzen, also von anderen Objekten aus, nicht
wahr?

Ja klar, aber ich denke deshalb habe ich auch ein public davor geschrieben. Oder ist das wieder etwas Anderes?

Wenn du deine Klasse nach obigem Schema nochmal gründlich
durchgehst, dann solltest du eigentlich alles zum Laufen
bringen können.

Viel Erfolg!

danke,

cu

Hallo Oli,

da hast du aber einiges vergessen. ich schicke dir das als Mail zu, wäre ein etwas langer Beitrag hier.
Auf jeden Fall kannst du mal berichten, ob du klar kommst!

MfG.
Marc

Hallo nochmal!

Ja, ich bin Anfänger, aber wenn ich euch verrate, wie alt ich
bin, lacht ihr euch tot!

Warum sollte ich den lachen? Als ich mit Programmieren angefangen habe, war ich etwa 10 oder so (und damals hatte ich noch kein Internet, das mir das erklärt hat).

Das Alter ist doch bei sowas völlig egal…

Du wirst nämlich eigentlich nie aus „main“ heraus direkt auf
die Klasse direkt zugreifen, sondern statt dessen ein neues
Objekt davon anlegen:

Das habe ich noch nicht ganz verstanden. Könntest du mir das
vielleicht nochmal genauer erklären?

Na ja, Dinge, die „static“ sind, gehören zur Klasse, alles andere gehört zum instanzierten Objekt. Klar?

Das musst du bereits beim Erstellen der Klasse unterscheiden. In Bis auf ein paar Sonderfälle werden die meisten Eigenschaften einer Klasse (also die Variablen, etc.) nicht statisch sein, weil jedes Objekt da seine eigene Version zu besitzen sollte. Sie definieren den Zustand eines Objektes.

Nur Dinge, bei denen du dir sicher bist, dass sie zur Klasse selbst gehören, bzw., dass alle Objekte sie nur ein einziges mal besitzen sollen/dürfen, werden „static“.

Die „main“-Methode sollte keinerlei Einfluss auf deine Entscheidungen über den sonstigen Aufbau der Klasse haben.

In „main“ legst du also ein neues Objekt deiner Klasse an, mit
dem du arbeitest, denn so würdest du die Klasse ja auch „von
außen“ her benutzen, also von anderen Objekten aus, nicht
wahr?

Wenn du es so machst, dann klappt das auch.

Jetzt etwas klarer?

Ja klar, aber ich denke deshalb habe ich auch ein
public davor geschrieben. Oder ist das wieder etwas
Anderes?

Das ist schon ok, aber das meinte ich nicht. Das „public“ ist dann eben dazu da, das etwas nach außen hin für andere Objekte sichtbar ist. „static“ bezieht sich auf die Klasse selbst, ist also eher eine interne Eigenschaft.

Gruß,
Stefan :smile:

1 „Gefällt mir“

Ja, ich bin Anfänger, aber wenn ich euch verrate, wie alt ich
bin, lacht ihr euch tot!

Ach spar dir das mit dem Verraten, deine Visitenkarte gibt ja alle nötigen Details her *totlach* :wink:
Ne im Ernst, find ich gut, dass du gleich mit ner vernünftigen Sprache dich beschäftigst… in dem Alter wird doch sonst nur php geproggt… bleib dran!

hi

Du wirst nämlich eigentlich nie aus „main“ heraus direkt auf
die Klasse direkt zugreifen, sondern statt dessen ein neues
Objekt davon anlegen:

Das habe ich noch nicht ganz verstanden. Könntest du mir das
vielleicht nochmal genauer erklären?

Na ja, Dinge, die „static“ sind, gehören zur Klasse, alles
andere gehört zum instanzierten Objekt. Klar?

Das musst du bereits beim Erstellen der Klasse unterscheiden.
In Bis auf ein paar Sonderfälle werden die meisten
Eigenschaften einer Klasse (also die Variablen, etc.) nicht
statisch sein, weil jedes Objekt da seine eigene Version zu
besitzen sollte. Sie definieren den Zustand eines Objektes.

Nur Dinge, bei denen du dir sicher bist, dass sie zur Klasse
selbst gehören, bzw., dass alle Objekte sie nur ein einziges
mal besitzen sollen/dürfen, werden „static“.

Die „main“-Methode sollte keinerlei Einfluss auf deine
Entscheidungen über den sonstigen Aufbau der Klasse haben.

also wenn mich jetzt nicht alles täuscht, hab ichs verstanden. gut, dass es heutzutage schon ein internet gibt, dass mir alles erklärt!

also nochmal zum mitdenken: static objekte sind NUR für die KLASSE, in der sie deklariert (stimmt das? oder heißt das, was ich meine definieren?) sind. und ein instanziertes objekt ist etwas, das sozusagen „übergeordnet“ ist oder die nächste „ebene“ darstellt. stimmt das?
und dann ist eben die main der klasse übergeordnet? nein, das kann ich mir nicht vorstellen. aber logisch wäre es, wenn die klassse der methode main übergeordnet ist, sodass die main nicht dazu berechtigt ist irgendwas davon zu benutzen, was in der klasse definiert/deklariert/initialisiert ist.
also hier meine 3 NEUEN fragen:

1)was ist der unterschied zwischen definieren, deklarieren und initialisieren?
2)wenn ich versuche, aus der main heraus auf ein bestimmtes objekt in der klasse zuzugreifen geht das nicht, sondern ich erzeuge nur ein neues objekt. das habe ich verstanden. aber wieso geht das nicht?
3)und letztendlich: was ist ein instanziertes objekt?

In „main“ legst du also ein neues Objekt deiner Klasse an, mit
dem du arbeitest, denn so würdest du die Klasse ja auch „von
außen“ her benutzen, also von anderen Objekten aus, nicht
wahr?

Wenn du es so machst, dann klappt das auch.

ja, jetzt klappt es. danke@alle, die mir hier geholfen haben!!!
(bitte vergesst meine fragen nicht, aber ich begreife nunmal nicht sehr schnell.)

cu

Hallo!
Ich denke, das hier sollte all deine Fragen beantworten können:
http://java.rrzn.uni-hannover.de/tkji/javakurs/start…

Besonders wird dich das hier daraus interessieren:
http://java.rrzn.uni-hannover.de/tkji/javakurs/oop/k…

Lies es ruhig mal durch und wenn du noch Fragen hast, dann kannst du dich ja nochmal per Mail melden…

Gruß,
Stefan :smile: