PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kleines Anfänger Problem mit Java - NoSuchMethodError:



doobienodoubt
15-05-2004, 15:06
Hallo!

So ich habe gerade meine ersten Schritte mit Java unternommen und bin leider gleich wieder auf ein kleines Problem gestossen. :-)

Also ich verwende das Buch "Java lernen" und habe gleich mal versucht ein kleines Programm dort abzuschreiben und zu übersetzen.
Eigentlich sollte das ja ohne Probleme funktionieren da ich es ja nur abschreibe. *g*

Okay ich kompeliere den Text also mit javac Flagge.java und der Code wird auch ohne Fehlermeldung übersetzt.
Jetzt erstellt mir der Compiler gleiche 3 neue Dateien.

Flag.class Flagmaker1.class und Flagmaker1$1.class

Wenn ich nun versuche Flagmaker1.class zu starten mit java Flagmaker1 bekomme ich folgende Fehlermeldung:

bash-2.05b$ java Flagmaker1
Exception in thread "main" java.lang.NoClassDefFoundError: Flagmaker1

Versuche ich Flag.class zu starten kommt folgendes :

bash-2.05b$ java Flag
Exception in thread "main" java.lang.NoSuchMethodError: main

Woran kann das liegen und was mache ich falsch?
Ich habe das kompl Sun JDK Paket installiert und als Editor nutze ich Jext.

Über eine ausführliche Analyse und eine umfangreiche Erklärung wäre ich sehr dankbar. *g*

Hier noch der kompl. Code :

import java.awt.*;
import java.awt.event.*;

class FlagMaker1 extends Frame {

/* Flag drawing program J M Bishop April 2000
*-----------------------
*Veranschaulicht Ausgabe von Farbe und einfacher Grafik
*/

FlagMaker1 () {
add ("Center", new Flag());
// Sorge daf?r, dass das Programm beim Schlie?en des Fenster endet
addWindowListener(new WindowAdapter () {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
} );
// Setze Titel und Groesse des Frames und aktiviere die
// in der Methode paint beschriebene Zeichnung.
setTitle (" A Flag");
setSize (300, 200);
setVisible (true);
}
public static void main (String [ ] args) {
new FlagMaker1 ();
}
}

class Flag extends Canvas {
public void paint (Graphics g) {
// Zeichne die Flagge mit farbigen Rechtecken
g.setColor (Color.black);
g.fillRect (40,40,200,40);
g.setColor (Color.red);
g.fillRect (40,80,200,40);
g.setColor (Color.yellow);
g.fillRect (40,120,200,40);

// Beschrifte die Zeichnung
g.setColor (Color.black);
g.drawString ("Germany", 100,180);
}
}

Viele Grüße.
doobie

anda_skoa
15-05-2004, 15:34
Da die Klasse FlagMaker1 heißt, sollte die Datei FlagMaker1.java heißen (auch Großschreibun beachten).

java FlagMaker1

sollte dann klappen

Ciao,
_

peschmae
15-05-2004, 15:36
Starten musst du mit Java diejenige Klasse, deren "public static void main()" - Methode ausgeführt werden soll.
Es können durchaus mehrere Klassen eine Main-Methode besitzen (z.b. zu Testzwecken) - in deinem Fall ist es aber nur eine. Also sollte der Aufruf

java FlagMaker1
heissen.
Du hast allerdings java Flagmaker1 geschrieben - es wird hier aber zwischen grossem und kleinem m unterschieden.

Falls es immer noch nicht geht würde ich mal den aktuellen Ordner dem Classpath hinzufügen:

export CLASSPATH=.:$CLASSPATH
(bzw. export CLASSPATH=. falls dieser vorher noch leer war)

MfG Peschmä

doobienodoubt
15-05-2004, 15:45
*Gegen den Kopf hau* Au Au Au.
Ja ich habe tatsächlich nicht beachtet das ich ja auf Gross-Kleinschreibung achten muss.

Mit
java FlagMaker1

funktioniert es einwandrei! *g*

Vielen Dank für die schnellen Antworten.