Java.exe mit seltsamen Verhalten

JavaTesterin

Mitglied
Hallo Gemeinde,

ich beginne gerade mit Java und stelle einiges sonderbare Verhalten fest. Leider fehlen mir nun Ideen bzw. Antworten.

Ich benutze die Kommandozeile und habe ein kurzes Programm geschrieben, kompiliert und erfolgreich gestartet. Es hat eine Schleife hoch gezählt. Alles hat funktioniert. Danach ging mein PC in den "Energie sparen" Modus. Nach dem Wiedereinschalten starte mein Programm nicht mehr. Stattdessen erhalte ich die Fehlermeldung "ClassNotFoundException".

Danach habe ich das Programm auf ein einfaches "Hello World" Programm reduziert, um zu sehen, woran der Fehler liegen könnte. Leider kein Erfolg. Aufgefallen ist mir folgendes.

  1. Wenn ich es aus dem Compiler-Ordner starte: "java.exe D:\JavaSource\Schleife" (das ist das o. g. Szenario) startet es mittlerweile nicht mehr, obwohl es früher geklappt hat.
  2. Wenn ich es aus meinem JavaSource-Ordner starte, dann funktioniert alles nach wie vor: "C:\JDK-25\bin\java.exe Schleife"

Die beiden Aufrufzeilen habe ich in unterschiedlichen Variationen ausprobiert (mit/ohne Umgebungsvariablen für die betroffenen Ordner usw.). Leider ohne Erfolg.

Ansonsten verwendet ich eine CLASSPATH oder -classpath Option. Selbst wenn ich es tue, funktioniert Beispiel 1. nicht. Allerdings will ich a. d. St. auch gar keine Optionen verwenden, weil das Programm so laufen müsste. Ich will nur wissen, wie dieses Verhalten sein kann.

Hat jemand Ideen?
 

KonradN

Super-Moderator
Mitarbeiter
Das Verhalten ist vollkommen normal. Schau Dir einfach einmal an, was die Parameter von java sind. Dazu einfach einmal java.exe ohne Parameter aufrufen. Dann zeigt es die möglichen Parameter, also etwas wie:
Code:
Verwendung: java [Optionen] <Hauptklasse> [args...]
           (zur Ausführung einer Klasse)
   oder  java [Optionen] -jar <JAR-Datei> [args...]
           (zur Ausführung einer JAR-Datei)
   oder  java [Optionen] -m <Modul>[/<Hauptklasse>] [args...]
       java [Optionen] --module <Modul>[/<Hauptklasse>] [args...]
            (zur Ausführung der Hauptklasse in einem Modul)
   oder  java [Optionen] <Quelldatei> [args]
           (zur Ausführung eines Programms mit einer einzelnen Quelldatei)

Der Weg, der am häufigsten verwendet wird, ist der Aufruf mit der Startklasse (erste Option). Die Klasse heisst bei Dir einfach Schleife. Wäre sie in einem Package, dann wäre es etwas wie my.package.name.MyClassName - also niemals ein Pfad.

Damit die Klasse gefunden wird, muss man ggf. einen Classpath angeben:
Code:
    -cp <Klassensuchpfad mit Verzeichnissen und ZIP-/JAR-Dateien>
    -classpath <Klassensuchpfad mit Verzeichnissen und ZIP-/JAR-Dateien>
    --class-path <Klassensuchpfad mit Verzeichnissen und ZIP-/JAR-Dateien>
                  Eine durch : getrennte Liste mit Verzeichnissen, JAR-Archiven
                  und ZIP-Archiven, in denen nach Klassendateien gesucht wird.
Der funktionierende Aufruf funktioniert, weil der aktuelle Pfad in dem Aufruf von dir im Classpath enthalten ist.

Wenn die .class Datei in d:\JavaSource enthalten ist und die Klasse keine package angabe hat, wäre der korrekte Aufruf für Dich also etwas wie
java.exe -cp d:\JavaSource Schleife
Su sagst Java also: Der ClassPath soll die Klassen in d:\JavaSource umfassen wenn er die Klasse Schleife startet.

Neuere Java Versionen können auch mit dem Java File gestartet werden (4. Option). Das ist gerade für kleine Programme gut und einfach, weil man dann nicht erst selbst übersetzen muss. Die Datei ist aber nicht Schleife sondern Schleife.java. So Du also eine aktuelle Java Version nutzt, kann auch funktionieren:
java.exe d:\JavaSource\Schleife.java

Die beiden Optionen mit -jar und -m kannst Du im Augenblick ignorieren. Erstere startet ein Java ARchiv welches dann neben den Klassen auch noch Metadaten enthält, die u.a. die zu startende Klasse angibt. Und die Variante mit dem -m wird nur wichtig, wenn Du auch mit Modulen arbeitest.
 

JavaTesterin

Mitglied
Hallo,

danke für deine Nachricht, allerdings verhält es sich nicht so. Es sei denn, ich verstehe hier etwas falsch.

Ich hatte bereits geschrieben, dass der Programmaufruf (Beispiel 1) auf exakt dieselbe Weise funktioniert hat. Als Variation von Beispiel 1 habe ich auch "C:\JDK-25\bin\java.exe D:\JavaSource\Schleife" ausprobiert, trotzdem derselbe Fehler. Das ist der einfachste und voll spezifizierte Aufruf.
Einen Klassenpfad musste ich, als der Aufruf noch funktionierte, auch nicht angeben. Selbst wenn ich jetzt einen angebe, funktioniert es nicht. Die Angabe eines Klassenpfads, egal in welcher Form, ist auch nicht notwendig, wenn das Programm simpel ist und keine extern vorliegenden Typ-Definitionen in sich hat. Zu dem Zweck habe ich mittlerweile eine leere main()-Methode, die also nichts macht. Damit schließe ich auch den Aufruf "System.out.println()" aus. Dennoch derselbe Fehler.

Anders ausgedrückt, der java.exe Aufruf funktioniert nur noch aus dem Source-Ordner, auch ohne CLASSPATH oder -classpath. Ganz so wie es funktionieren sollte.
 

KonradN

Super-Moderator
Mitarbeiter
Also dieser Aufruf:
C:\JDK-25\bin\java.exe D:\JavaSource\Schleife
ist und war immer ungültig. der Parameter gibt keinen Klassennamen und auch keine Datei an. Daher kann dieser Aufruf schlicht nicht funktionieren.

Das ist und bleibt einfach ein Fakt. Evtl. hast Du ein aktuelles Java (Java 12 oder so hat es eingeführt) und Du hattest die java Datei angegeben. Das wäre dann halt noch ein .java angehängt. Das wird dann funktioniert haben.

Einen Klassenpfad musste ich, als der Aufruf noch funktionierte, auch nicht angeben. Selbst wenn ich jetzt einen angebe, funktioniert es nicht.
Bei dem Aufruf mit der Datei kann es nicht funktionieren, so lange Du keine gültige Datei angibst. Und ich habe etwas getestet: Bei mir musste es auch eine .java Datei sein. (Ich hatte kurz die Idee, dass Du evtl. eine Datei ohne die Endung .java erzeugt hast und es dann ging, weil Du eine gültige Datei angegeben hast.)

Daher noch einmal ganz deutlich die beiden wichtigen Möglichkeiten:
1. Du gibst die Java Datei selbst an - das muss dann aber incl. dem .java erfolgen. Oder
2. Du gibst die reine Klasse an (Schleife), aber dann muss der Classpath so sein, dass er die (übersetzte) Klasse findet. Es muss also vor dem java Aufruf ein javac Aufruf gegeben haben, so dass ein Schleife.class Datei vorhanden ist.

So funktioniert Java unabhängig, was Du meinst gemacht zu haben oder so. Das was Du also beschreibst ist kein seltsames Verhalten sondern genau das erwartete Verhalten von java.exe.
 

JavaTesterin

Mitglied
Ok, ich blicke da immer noch nicht durch, ABER: Wie erklärt sich dann der erfolgreiche Aufruf aus meinem Source-Pfad heraus? Auch diesen kann ich in unterschiedlichen Variationen ausschreiben (absolut; relativ; mit/ohne definierten Umgebungsvariablen, die einen Pfad zum Interpreter oder den Source-Dateien enthalten usw.).

Die Unterschiede zwischen .java, .class und Kommandozeilen-Aufruf ohne Dateiendung bei java.exe usw. ist mir alles bekannt und diese Details berücksichtige ich auch. Andernfalls würde ich teilweise andere Fehlermeldungen bekommen, die hier aber nicht das Thema sind.

Aber, ich glaube, wir reden nur aneinander vorbei. Vllt. noch einmal heruntergebrochen.

1) Interpreter-Aufrufe / java.exe (in allen o. g. syntaktischen Varianten) aus dem Source-Ordner funktionieren jetzt und auch zuvor.
2) Interpreter-Aufrufe / java.exe (in allen o. g. syntaktischen Varianten) aus dem Compiler-/Interpreter-Ordner funktionieren nicht mehr (obwohl das früher der Fall war).

Interessanterweise funktionieren und funktionierten zuvor Compiler-Aufrufe (javac.exe) aus beiden Ordnern heraus, inkl. der zahlreichen syntaktischen Spielereien bei den Pfadangaben zu den Dateien (.java, .class), mit/ohnr Klassnpfade usw.

Offensichtlich kann der Compiler etwas, was dem Interpreter durch irgendwelche Umstände abhanden gekommen ist. Schließlich werden auch Interpreter und Compiler in ihrer Funktionsweise analog beschrieben, mit denselben Suchmechanismen nach Dateien und/oder Klassen usw.
 

KonradN

Super-Moderator
Mitarbeiter
Wie erklärt sich dann der erfolgreiche Aufruf aus meinem Source-Pfad heraus?
Bei dem Aufruf
java.exe Schleife
hast du den Aufruf nach dem ersten Schema. Schema ist hier ein Klassenname (Keine Datei!). Damit dies funktioniert, muss Schleife.java compiliert worden sein (also eine Schleife.class vorhanden sein. Der Classpath enthält das aktuelle Verzeichnis, d.h. Java schautim lokalen Verzeichnis nach der Klasse Schleife und findet diese in der Datei Schleife.class.

2) Interpreter-Aufrufe / java.exe (in allen o. g. syntaktischen Varianten) aus dem Compiler-/Interpreter-Ordner funktionieren nicht mehr (obwohl das früher der Fall war).
Hier noch einmal ganz deutlich: Du musst die Datei angeben. Die Datei ist bei Dir vermutlich:
D:\JavaSource\Schleife.java
und nicht
D:\JavaSource\Schleife

Der Aufruf muss also sein:
java D:\JavaSource\Schleife.java
und nicht
java D:\JavaSource\Schleife

Dein Aufruf ist also schlicht falsch, weil Du einen Dateinamen angibst, der nicht existiert. Die Dokumentation schreibt ja auch ganz klar: Quelldatei! Du musst die Quelldatei angeben. Und das ist eine .java Datei und das .java kannst Du nicht einfach weg lassen!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M HelloWorld.txt nach HelloWorld.java in Win11 funktioniert nicht Java Basics - Anfänger-Themen 4
Sniper1000 Java lässt sich auf älterem Win 7 nicht mehr installieren Java Basics - Anfänger-Themen 34
J Probleme mit drucken aus Java Java Basics - Anfänger-Themen 3
Gokul Java chart library suggestion for web application? Java Basics - Anfänger-Themen 2
D wie kann ich gcc aus einer .java datei heraus aufrufen? Java Basics - Anfänger-Themen 2
S Text Formatierung in Java Java Basics - Anfänger-Themen 2
B Erste Schritte yaml parsen in Java Java Basics - Anfänger-Themen 19
C Methoden Umlaute in Java Java Basics - Anfänger-Themen 18
W Java-PRogramm liest als EXE-File Nicht USB, jedoch aus NetBeans Java Basics - Anfänger-Themen 45
W Methoden java map ersatz für c++map Java Basics - Anfänger-Themen 3
M Erste Schritte Java Primzahltester Java Basics - Anfänger-Themen 4
A csv Reader für Java? Java Basics - Anfänger-Themen 27
K Java - Enums Java Basics - Anfänger-Themen 30
tomzen Java Unterstützung für exel dateien installieren. Java Basics - Anfänger-Themen 2
Rookar java.lang.NoClassDefFoundError: org/json/JSONException Java Basics - Anfänger-Themen 2
Rookar Mit Button andere java öffnen Java Basics - Anfänger-Themen 4
F Java Object to Hashmap ? Java Basics - Anfänger-Themen 6
I Backend in Java und Ansicht von Dateien in statische HTML Seiten? Java Basics - Anfänger-Themen 15
R Input/Output Verwendung des Euro-Zeichens in Java Java Basics - Anfänger-Themen 7
I Push Nachrichten von JAVA EE App an Mobile App Java Basics - Anfänger-Themen 3
H .java Dateien in Eclipse einbinden und ausführen Java Basics - Anfänger-Themen 1
onlyxlia Schlüsselworte Was meint man mit "einen Typ" in Java erstellen? Java Basics - Anfänger-Themen 2
O Java Kara geschweifte Klammern Java Basics - Anfänger-Themen 2
G Mausrad logitech kann links und rechts klick wie in java abragen. Java Basics - Anfänger-Themen 15
XWing Java Klssenproblem Java Basics - Anfänger-Themen 4
R Umgebungsvariable java -cp gibt immer Java-Hilfe... Java Basics - Anfänger-Themen 3
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
F TableModelListener: java.lang.ArrayIndexOutOfBoundsException: 132 Java Basics - Anfänger-Themen 3
G Java 8 - Support-Ende Java Basics - Anfänger-Themen 7
T Java Weihnachtsbaum + Rahmen Java Basics - Anfänger-Themen 1
N Will mit Java anfangen Java Basics - Anfänger-Themen 13
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
M Java Iterator Verständnisfrage Java Basics - Anfänger-Themen 6
M Java Mail Programm Java Basics - Anfänger-Themen 4
Sniper1000 Java 391 für Windows Java Basics - Anfänger-Themen 37
G Java long- in int-Variable umwandeln Java Basics - Anfänger-Themen 6
JaZuDemNo Java im Studium Java Basics - Anfänger-Themen 7
E Java Programm zur anzeige, ob Winter- oder Sommerzeit herrscht Java Basics - Anfänger-Themen 62
I QR code in Java selber generieren Java Basics - Anfänger-Themen 5
V Java-Ausnahmebehandlung: Behandlung geprüfter Ausnahmen Java Basics - Anfänger-Themen 1
krgewb Java Streams Java Basics - Anfänger-Themen 10
A Überwältigt von der komplexen Java Welt Java Basics - Anfänger-Themen 29
O Mehrfachvererbung auf Spezifikations- und Implementierungsebene in Java. Interfaces Java Basics - Anfänger-Themen 19
John_Sace Homogene Realisierung von Generics in Java ? Java Basics - Anfänger-Themen 19
P Meldung aus Java-Klasse in Thread an aufrufende Klasse Java Basics - Anfänger-Themen 1
R mit Java API arbeiten Java Basics - Anfänger-Themen 9
P JDK installieren Probleme bei der Java-Installation Java Basics - Anfänger-Themen 8
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
Timo12345 JNLP File mit Java öffnen Java Basics - Anfänger-Themen 2
S Video Editierung mit Java.._ Java Basics - Anfänger-Themen 2
F Einstelungen in Java - CursorBlinkRate Java Basics - Anfänger-Themen 10
A PHP $_POST["name"] in Java Java Basics - Anfänger-Themen 3
vivansai21 Is there a oneliner to create a SortedSet filled with one or multiple elements in Java? Java Basics - Anfänger-Themen 9
Athro-Hiro Weißes Bild in Java erstellen Java Basics - Anfänger-Themen 3
Arjunreddy Can someone please tell me how to use a debugger in BlueJ(a Java environment) Java Basics - Anfänger-Themen 1
M Java assoziationen (UML) Java Basics - Anfänger-Themen 8
H Excel-Tabellen mit Java erstellen Java Basics - Anfänger-Themen 4
Simon16 Java ArrayListe von einer Klasse sortieren Java Basics - Anfänger-Themen 2
P Wie kann ich in meinem Java Programm etwas dauerhaft speichern? Java Basics - Anfänger-Themen 5
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
xXGrowGuruXx Java einstieg, leichte sache 0 verstanden Java Basics - Anfänger-Themen 7
A java.sql.SQLException: Data type mismatch. Java Basics - Anfänger-Themen 1
H Java-Programm zur Ausgabe von Zuständen Java Basics - Anfänger-Themen 80
N Java Spiel Figur auf dem Hintergrundbild bewegen. Java Basics - Anfänger-Themen 11
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
N Java Taschenrechner hat Jemand vlt einen Tipp dafür wie ich jetzt die buttons verbinden kann und das Ergebnis auf dem textfield anzeigen lassen kann Java Basics - Anfänger-Themen 13
A Lerngruppe Java Java Basics - Anfänger-Themen 2
G Help me in the Java Program Java Basics - Anfänger-Themen 2
L Java- Vererbung Java Basics - Anfänger-Themen 4
LimDul Suche Java Stream Tutorial Java Basics - Anfänger-Themen 2
_so_far_away_ Ich möchte Java lernen Java Basics - Anfänger-Themen 11
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
V Bild per Java Script austauschen Java Basics - Anfänger-Themen 7
MoxMorris this Keyword in Java Java Basics - Anfänger-Themen 14
D Wie kann man in Java nach Arrays auf Duplikate prüfen Java Basics - Anfänger-Themen 12
wolei JAVA Zeitdifferenz feststellen. Java Basics - Anfänger-Themen 4
DiyarcanZeren Rekursion in Java Java Basics - Anfänger-Themen 5
wolei Java generic interface in a generic class Java Basics - Anfänger-Themen 6
monsterherz Ablauf der Erstellung eines Java Programmes Java Basics - Anfänger-Themen 17
monsterherz Circle.java:5: error: <identifier> expected Java Basics - Anfänger-Themen 2
julian-fr Wie kann ich am besten Java lernen? Java Basics - Anfänger-Themen 17
A Java-Properties und -RessourceBundles Java Basics - Anfänger-Themen 5
lrnz22 Java-Basics-Aufgabe Java Basics - Anfänger-Themen 8
R Java kann nicht installiert werden Java Basics - Anfänger-Themen 8
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
G In ein java Dokument Ton einbinden Java Basics - Anfänger-Themen 1
C was heisst es wenn java ']' erwartet ? Java Basics - Anfänger-Themen 2
KeinJavaFreak Erste Schritte Programm "Java(TM) Platform SE binary " nicht vorhanden Java Basics - Anfänger-Themen 1
KeinJavaFreak Erste Schritte Java "Executable Jar File" nicht vorhanden Java Basics - Anfänger-Themen 1
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
J Java Testklasse Java Basics - Anfänger-Themen 5
P Java Selenium . Parameterized.Parameters erzeugt eine Fehlermeldung Java Basics - Anfänger-Themen 14
W Java-Code mit Array Java Basics - Anfänger-Themen 14
W Java-Code Java Basics - Anfänger-Themen 2
P BeforeEach AfterEach werden nicht ausgeführt. Java / Selenium Java Basics - Anfänger-Themen 4
A Wie führe ich eine Batch-Datei von meiner Java-Anwendung aus? Java Basics - Anfänger-Themen 18
W Java code- TicTac toe Java Basics - Anfänger-Themen 51
Ostkreuz Java Docs Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben