# Anfängerfrage HelloWorld? cmd-Problem



## JeffreyD (18. Jan 2011)

So, ich hatte jetzt endlich vor meine ersten Schritte in Java zu machen (ohne Vorkenntnise in einer anderen Sprache) was auch meinen Anfang als "Programmierer" darstellt..
Ich verfahre nach dem Buch "Java als erste Programmiersprache "das ich mir online als PDF geladen habe.. ich habe jetzt ein Problem, ich habe (denke ich mal richtig) die Umgebungsvariable gesetzt , und (als txt aber mit endung .java) mit dem Editor von Windows (Vista) folgende Datei erstellt: HelloWorld.java, mit folgendem Text: 

public class HelloWorld
{
	public static void main (String[] args)
	{
		System.out.println ("Hello, world!");
	}
}

Wenn ich jetzt bei cmd.exe eingebe: javac HelloWorld.java, kommt folgendes:

javac:not a file: HelloWorld.java
Usage: javac <options> <source files>

Hat jemand ne Idee wie ich das ändern kann?


----------



## darekkay (18. Jan 2011)

Arbeitest du zufällig nicht unter Windows? Bei den meisten anderen Betriebssystemen müsste man das mit javac ./HelloWorld.java aufrufen.
Ob es an der Umgebungsvariable liegt, kannst du auch leicht prüfen: einfach die Datei in dein jdk-verzeichnis verschieben (gleicher ordner wie javac.exe) und das ganze von dort aus starten. (dürfte aber nicht der Fall sein).


----------



## JeffreyD (18. Jan 2011)

Ne wenn ich das in den Ordner verschiebe ist es auch nicht besser, also liegts nicht daran, was kann sonst noch falsch sein.. muss ich das nicht als txt öffnen oder mit einem anderen Editor?

(hey ein Dexter-Fan, sehr gut!)


----------



## Final_Striker (18. Jan 2011)

Du musst dich entweder im Verzeichnis befinden wo sich die Datei befindet oder die Datei über den vollen Namen aufrufen.

Also z.B.:

C:\Java Dateien> javac HelloWorld.java

oder

C:\> javac c:\Java Datein\HelloWorld.java


----------



## JeffreyD (18. Jan 2011)

gleicher Fehler, was könnte es noch sein? sollte ich java neu installieren oder ist es ein cmd-fehler?


----------



## Cola_Colin (18. Jan 2011)

man kann sich auch bei komplexen und somit nervigen verzeichnissen bei der HelloWorld.java eine test.bat erstellen und in die schreiben: 
cmd

Dann kann man über die bat ziemlich einfach eine konsole mit dem passenden Verzeichnis öffnen.


----------



## utzerna123ttt (18. Jan 2011)

Javac meldet sich ja.
du muesstest in das verzeichnis wechseln, das die binarys beinhaltet, mittels dir


----------



## XHelp (18. Jan 2011)

Beschreib mal ganz genau was du machst oder mach am besten Screenshots


----------



## JeffreyD (18. Jan 2011)

Naja erst hab ich auf dem Desktop mit Rechstklick eine txt Datei geöffnet und da den oben bereits hingeschriebenen text reingeschrieben (mit Notepad auf WinVista)und die Datei "HelloWorld.java" genannt und dann ein CMD Fenster in den Ordner getan mit dem ich die Eingabe mache die ich oben geschrieben habe und immer wieder kommt die gleiche Fehlermeldung, aber alles ist 1:1 so wie im Buch..


----------



## SlaterB (18. Jan 2011)

vielleicht heißt die Datei ungünstigerweise HelloWorld.java.txt mit ausgeblendeter Dateiendung,
'dir' listet die Dateien auf


----------



## Cola_Colin (18. Jan 2011)

Wenn die Datei komplett fehlt, gibt es "file not found"
Ich hab es geschafft deine Fehlermeldung so zu reproduzieren:
-> HelloWorld.java ist ein Ordner und schon gibt es "not a file".

Hast du eventuell irgendwo so einen Ordner an ungünstiger Stelle ?


----------



## JeffreyD (18. Jan 2011)

ne das nicht aber wo blendet man bei vista noch gleich ein das bekannte dateinamen doch eingeblendet werden das was slater sagt kann ja sein..

okay hab's


----------



## XHelp (18. Jan 2011)

klimmper in der Konsole "dir" ein und dann wirst du es sehen


----------



## Cola_Colin (18. Jan 2011)

Systemsteuerung -> Ordneroptionen suchen -> Reiter "Ansicht" -> Haken weg bei "Erweiterungen bei bekannten ..." weg.

Allerdings gibt es in dem Fall einer HelloWorld.java.txt ein file not found.
not a file sagt ja aus: "Ich finde was, aber das ist keine Datei".

Jedenfalls sollte es so sein.


----------



## JeffreyD (18. Jan 2011)

JAAA!!! Ich hab's es geht!! (und ich komme mir dumm vor)

Ich war schon voll am resignieren...vielen Dank, super Forum..könnt euch auf weitere Fragen einstellen


----------



## JeffreyD (18. Jan 2011)

oh man wenn ich jetzt eingebe: java HelloWorld
sollte eigentlich das ergebniss kommen, nämlich  "Hello, World !" als "Antwort" aber es kommt wieder ein Fehler: Exception in thread "main" java.lang.NoSuchmethodError: main


----------



## Final_Striker (18. Jan 2011)

Wenn du nicht beschreibst, was, wie, wo du GENAU aufrufst, wird dir hier keiner helfen können.


----------



## JeffreyD (18. Jan 2011)

oh tut mir leid war sehr ungenau..

also ich habe jetzt mit dem befehl in cmd:"javac HelloWorld.java" eine HelloWorld.class Datei zusätzlich angelegt und wenn ich jetzt eingebe: "java HelloWorld" müsste im cmd Fenster in einer neuen Zeile stehen: Hello, World!
tut es aber nicht, ich kriege nur diese Fehlermeldung, ich denke es liegt daran das er die class oder so nicht finden kann, nach etwas googeln hab ich bis jetzt herausgefunden das man was an der Umgebungvariablen CLASSPATH ändern sollte, kann mir da jemand weiterhelfen?


----------



## JeffreyD (18. Jan 2011)

bin mir jetzt sicher, dass es an der falsch gesetzten CLASSPATH liegt, kann mir jemand vllt. sagen was GENAU ich da eintragen soll, weil das ist ja nicht nur ein Pfad o.ä.


----------



## SlaterB (18. Jan 2011)

im Idealfall diese Umgebungsvariable komplett entfernen, 
ansonsten wenigstens dafür sorgen, dass das aktuelle Verzeichnis immer berücksichtigt wird:
CLASSPATH=.;C\blahblah;C\blahblah2
den Punkt und Semikolon am Anfang beachten

nach Umgebungsvariablen-Änderungen immer eine neue Konsole aufmachen, bei alten bewirkt das nichts,

man kann für den java-Befehl auch aktuell den ClassPath angeben und so Umgebungvariablen überdecken:
java -cp . HelloWorld


> oh tut mir leid war sehr ungenau..

gar nicht mal, den genauen Befehl + die Fehlermeldung hattest du im vorherigen Posting auch schon genannt,
dass es das gleiche Verzeichnis ist und die Klasse kompiliert gewesen sein sollte, durfte man annehmen


----------



## turing (18. Jan 2011)

Dann mach mal:
java -cp . HelloWorld

Hast Du ein Pacakage deklariert?


----------



## JeffreyD (18. Jan 2011)

okay ändert sich immer noch nichts (trotzdem danke für die tipps)

ich habe jetzt in der umgebungsvariablen stehen:
Name der Variablen: CLASSPATH
Wert der Variablen: .;C:\Program Files\Java\jdk1.6.0_23\lib (hab da schon verschiedenstes ausprobiert)

bis jetzt immer wieder die gleich fehlermeldung..


----------



## JeffreyD (18. Jan 2011)

@turing

hab ich auch schon probiert immer wieder das gleiche aber das kompilieren mit javac klappt einwandfrei


----------



## SlaterB (18. Jan 2011)

was kommt bei
java Helloxy
als Fehlermeldung? kann grad nicht testen,
müsste es bei fehlender Klasse nicht 'No Class Definition Found' oder ähnliches sein? 
im Internet finden sich beide Varianten,

wenn die Klasse gefunden wird, dann ist entscheidend dass sie public ist, genau wie die Datei heißt, dass 
> public static void main(String[] args)
genau eingehalten ist, nach deinem ersten Posting sollte alles so sein,
sicher dass du nicht alte Versionen des Codes irgendwann mal kompiliert hast oder so?

kopiere die Datei testweise zu H.java, nenne die Klasse darin H, main-Methode kontrollieren, geht kompilieren, geht dann ausführen?
Klasse hier posten, evtl. Screenshot vom geöffeneten Editor, daneben die Konsole mit ausgeführten dir
und ausgeführten java -cp . H-Befehl,
Screenshots kann man hier direkt an Postings anfügen,

alles Strohhalm-Tipps, richtig Sinn macht das nicht


----------



## JeffreyD (18. Jan 2011)

Kompilieren geht alles wenn ich es in H ändere, aber class findet er wieder nicht..


----------



## JeffreyD (18. Jan 2011)

Bei Helloxy bekomme ich das(war zwischendurch unregelmäßig auch schonmal da) :


----------



## SlaterB (18. Jan 2011)

nun, der erste Screenshot zeigt klar einen Fehler, die Methode heißt dort man, nicht main..


----------



## JeffreyD (18. Jan 2011)

hab ich berichtigt, hat aber am Fehler nichts geändert


----------



## XHelp (18. Jan 2011)

Hast du auch daran gedacht das ganze noch mal zu kompilieren?


----------



## JeffreyD (18. Jan 2011)

ja natürlich, hab ich gemacht..hat leider nichts gebracht..liegt aber nicht an meiner Datei, hab das auch schon mit anderen Dateien aus den Java-Examples gemacht, kompilieren geht, ausführen nicht , es ist immer der gleiche Fehler


----------



## SlaterB (18. Jan 2011)

zum Ausschluss aller halbwegs denkbaren bekannten Fehler (.class-Datei kann nicht überschrieben werden, wird aus anderem Verzeichnis bevorzugt geladen usw.)
musst du jetzt erneut die Klasse wechseln, z.B. H2, neue Java-Datei, diesmal von Anfang an Methode richtig schreiben (!),
nur einmal kompilieren usw.,

dass du den Namen der Methode falsch geschrieben hast, nachdem extra überall drauf hingewiesen wird, gibt ja zu denken,
wer weiß ob es aktuell in H richtig ist und nicht mani oder so heißt..,

die unterschiedlichen Fehlermeldungen aus den zwei Screenshots belegen immerhin recht deutlich, dass die Klasse oder zumindest die .class-Datei(en) doch gefunden werden,
es ist also im wesentlichen der Fehler der auch benannt wird: die Methode main muss genau stimmen,

aber so richtig falsch kann man das eigentlich gar nicht machen, selbst per Zufall müsste doch inzwischen irgendwann mal eine richtige Konstellation dabei sein,
die wirkliche Fehlerursache liegt wohl immer noch im Dunkeln..

edit: dem obigen ersten Screenshot nach bist du in einem Verzeichnis, das H.Java heißt?!
weiß nicht ob das stören kann, aber solche Spielereien bitte unterlassen, 
Desktop, Eigene Dateien, Programme oder ähnlich Windows-kontrolliertes sind auch verdächtig,

nur  c:\temp oder ähnlich kurzes sind sinnvolle Testverzeichnisse


----------



## SlaterB (18. Jan 2011)

statt Wordpad ruhig auch mal den schlichten Windows-Editor testen, falls noch vorhanden,
wegen Zeilenumbruch oder wer weiß was da noch alles störend in die Datei kommen kann,
obwohl javac ja funktioniert,

und immer dann neue Datei, neue Klasse usw.,
notfalls Eclipse installieren..


----------



## xehpuk (18. Jan 2011)

… und wenn das alles nicht klappt, kannste hier ja mal die java- und class-Datei hochladen.


----------



## uterzna123 (19. Jan 2011)

dir war natürlich irreführend.

Als System-Variable sollte nur die Variable Path so erweitert werden, das lediglich ein
;C:\Program Files\Java\jdk1.6.0_23\bin
angehängt wird. Andere sollte es nicht geben.

bin ist das Verzeichnis, das ausführbare Tools des JDK enthält (.EXE)

cmd.exe ist ein Windows-Programm, dass die textuelle Ein- und Ausgabe simuliert.

Alle programme lauten meist so:


```
public class Klasse {

public static void main(String[] args) {

  System.out.println("Hello world!");

}

}
```

Weiß man zunächst nichts damit anzufangen, schreibt man es einfach ab.

Textdateien, die Java-Code beinhalten, müssen immer die Endung .java haben, und so heißen, wie die darin enthaltene Klasse.

Mittels des Compilers javac wird eine solche Quelltextdatei in eine .class-Datei übersetzt, die dann von der JVM auf jeder Maschine ausgeführt werden kann - das Programm wird gestartet
Eine .class-Datei heißt auch Binärcodedatei.

Um das kompilieren zu veranlassen, kann man mit cd in verschieden Verzeichnisse wechseln, in denen die .java files liegen usw.

Das alles wird in jeden Buch über Java an Anfang erwähnt..


----------



## ARadauer (19. Jan 2011)

> man kann sich auch bei komplexen und somit nervigen verzeichnissen bei der HelloWorld.java eine test.bat erstellen und in die schreiben:
> cmd
> 
> Dann kann man über die bat ziemlich einfach eine konsole mit dem passenden Verzeichnis öffnen.


mhnn... nein bei komplexen nervigen verzeichnissen würde ich einfach eine IDE verwenden!


----------



## JeffreyD (19. Jan 2011)

so hab java komplett deinstallier extra aus der registry entfernt, alle umgebungsvariablen gelöscht und danach alles komplett neu gemacht jetzt klappt's, "Programm" HelloWorld funktioniert..thx an alle die mir geholfen haben


----------

