Java Interpreter No Class def found

Status
Nicht offen für weitere Antworten.

pi314151

Mitglied
Hallo zusammen,

ich lese mich momentan durch die ersten Kapitel eines Java Buchs und wundere mich wieso folgendes Beispielprogramm nicht vom Interpreter akzeptiert wird. Laut Buch sollte alles bestens funktionieren, tut es aber nicht ^_^ . Mit der Fehlermeldung No Class Definition found kann ich nichts anfangen, für ein wenig Hilfe wäre ich dankbar.

Gruß,

Jan


[HIGHLIGHT="Java"]
// CD/examples/ch05/ex01

package ch05.rectangle;

public class rectangle {

private int height = 1; // falsch

private int width = 1;

public rectangle () {}

public rectangle (int height, int width) {

this.height = height;

this.width = width;

}

public int getHeight() {

return height;

}

public int getWidth() {

return width;

}

public int getArea() {

return height * width;

}

public void setHeight(int height) {

this.height = height;

}

public void setWidth(int width) {

this.width = width;

}

public void setDimension(int height, int width) {

this.height = height;

this.width = width;

}

}
[/HIGHLIGHT]
[HIGHLIGHT="Java"]
// CD/examples/ch05/ex01

package ch05.rectangle;

public class TestApp {

public static void main(String[] arguments) {

Rectangle rect = new Rectangle(1, 5);

System.out.println("Fl\u00e4che = " + rect.getArea() + " m^2");

}
}
[/HIGHLIGHT]
java0.png
 
Klemmt die shift-taste? Du hast den Klassennamen zwei mal auf zwei verschiedene Weisen falsch geschrieben 😕 Versuch's einfach mal in aller Ruhe korrekt einzutippen.

Außerdem zur Terminologie: java code wird kompiliert, nicht interpretiert.
 
Also mal vorne Weg: Klassennamen schreibt man groß!!!
Und jetzt guck dir mal an wie du die Klasse programmiert hast (besonders den Name) und dann wie du ein Objekt der Klasse anlegst...
Groß- und Kleinschreibung spielen eine Rolle in Java! Frag mich nicht wie das heisst 😀 aber int a und int A sind 2 verschieden Variablen...
 
Danke für die Antworten,

konnte mir aber nicht weiterhelfen. Der Vorschlag mit der case sensitivity(Groß/Kleinschreibung @manuche) hat nichts gebracht, ich bekomme mit folgendem korrigierten Code immernoch den selben Fehler vom Java Textinterpreter serviert: "java.lan.g.NoClassDefFoundError"
[HIGHLIGHT="Java"]
// CD/examples/ch05/ex01

package ch05.Rectangle;

public class Rectangle {

private int height = 1; // falsch

private int width = 1;

public Rectangle () {}

public Rectangle (int height, int width) {

this.height = height;

this.width = width;

}

public int getHeight() {

return height;

}

public int getWidth() {

return width;

}

public int getArea() {

return height * width;

}

public void setHeight(int height) {

this.height = height;

}

public void setWidth(int width) {

this.width = width;

}

public void setDimension(int height, int width) {

this.height = height;

this.width = width;

}

}
[/HIGHLIGHT]
[HIGHLIGHT="Java"]
// CD/examples/ch05/ex01

package ch05.Rectangle;

public class TestApp {

public static void main(String[] arguments) {

Rectangle rect = new Rectangle(1, 5);

System.out.println("Fl\u00e4che = " + rect.getArea() + " m^2");

}
}
[/HIGHLIGHT]
java1.png
 
Das liegt an den Highlight-Tags hier und eckigen Klammern 😀
Mit
[HIGHLIGHT="Java"]System.out.println(array[0]);[/HIGHLIGHT]
ohne
Code:
System.out.println(array[0]);
 
@manuche:

(String[] arguments)

das verstehe ich als Parameterliste der main Methode, wo ist da ein Semikolon zuviel? Falls ich das falsch verstehe bitte ich um die Zeile in welcher deiner Meinung nach der Fehler ist.

@geeee:

keine AHnung was du meinst.
 
Wenn du den JavaCode hier ins Forum reinschreibst und eckige Klammern verwendest, dann kommt automatisch ein Semikolon nach dem Schließen der Klammern hinzu. Das tut zum eigentlichen Thema nix zu Sache, sollte aber nur ein Hinweis sein, dass es kein Fehler von dir im Sourcecode ist, wie manuche es dachte. (worauf du auch gerade geantwortet hast) schau dir einfach deinen Post oben an, da ist ein automatisches Semikolon in der Main-Signatur.
 
Also dann hier lieber nocheinmal das ganze als Bild, da das Forum seine Probleme mit der Darstellung von Java Quellcode hat:
java2.png


Wo ist der Fehler? Ich habe keinen blassen Schimmer...
 
Also bei dem Aufruf hast du Testapp statt TestApp geschrieben... Vllt liegts daran...? Hab das noch nie probiert 😀
 
java ch05.Rectangle.TestApp

oder

java -cp . ch05.Rectangle.TestApp


Da in Java keine Verzeichnisse sondern packages gelten.
 
java3.png


Einstellen des Projekt-Klassenpfads hat gesagt.:
Der Classpath gehört zu den Dingen, über die man sowohl als Einsteiger als auch als erfahrener Java-Programmierer immer wieder stolpert. Der Klassenpfad bezeichnet die Stelle, an der sich auf der Festplatte eines Computers das Stammverzeichniss der Java-Klassen befindet. Der Klassenpfad ergibt mit dem Package-Pfad im Titel einer Klasse den Suchpfad für den Compiler und die Laufzeitumgebeung. Der Suchpfad berechnet sich also wie folgt:
Suchpfad = Classpath + Packagepfad

Wieso muss ich den Class Searchpath manuell angeben? So wie ich das gelesen und verstanden habe nimmt der Interpreter das Verzeichniss aus dem er aufgerufen wird als Classpath und die Kopfinformationen aus den Dateien als Packagepfad.

Classpath= C:\Dokumente und Einstellungen\pi\Desktop\java\projekte\
Packagepfad= ch05.Rectangle = ch05\Rectangle\

Suchpfad = C:\Dokumente und Einstellungen\pi\Desktop\java\projekte\ch05\Rectangle\

Kann ich mir das -cp irgendwie ersparen? Wozu schreibe ich denn die Package informationen in den Quelltext wenn die eh nix birngen und ich es später eh manuell eingeben muss?

Und was mich noch stört ist das das Sonderzeichen ä nicht korrekt ausgegeben wird. "Fl\u00e4che" ist eine UNICODE-Kodierung? Beißt sich das nur mit dem Textinterpreter in der ANSI-shell? Oder ist das ein generelles Problem?

Gruß,

Jan
 
in diesem Falle kann man sich das -cp . auch sparen. Probier es mit
java ch05.Rectangle.TestApp
aus. Aber wenn du z.B. eine andere Bibliothek = jar File einbinden möchtest, musst dies mittels -cp explizit in den Pfad aufnehmen. Das mit den Sonderzeichen ist imo so eine Sache, mal funktioniert es, mal nicht.
Das package musst du angeben da z.B. es zwei Klassen
pkg1.Test
pkg2.Test
geben kann. Und du dann über das package eindeutig angeben musst, welche der beiden Klassen du ausführen möchtest.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben