Gleiches Verzeichnis für class und java unter Windows Muss?

zimtstern

Mitglied
Hallo zusammen, :)

ich arbeite schon seit 4 Jahren im Unterricht mit Java, allerdings über Linux.
Nun wollte ich auch unter Windows Java programmieren und habe mir auch schon die jdk und jre heruntergeladen und die path-Umgebungsvariable angepasst.
Wie im Unterricht beigebracht bekommen, wollte ich es auch unter Windows beibehalten, die java-Dateien und die class-Dateien in unterschiedlichen Verzeichnissen unterzubringen, z.B.:
\java\sources\halloWelt\HalloWelt.java
\java\classes\halloWelt\HalloWelt.class
Das mit dem Kompilieren klappt auch soweit, aber beim Ausführen scheitert's (siehe Bild).
HauptklasseNotFound.PNG

Auf Verdacht habe ich die class-Datei ins Verzeichnis der java-Datei kompliliert und siehe da, es klappt!
Ich bin auch schon direkt ins Verzeichnis der class rein und wollte da ausführen, lieferte denselben Fehler.
Also muss unter Windows class und java am selben Ort gespeichert sein?

Liebe Grüße,
zimtstern
 
Zuletzt bearbeitet:

arilou

Bekanntes Mitglied
Du brauchst beim Ausführen einen '.' zwischen "Verzeichnisname" und Klassenname anstatt einem '\'.
Dann sollte es eigentlich funktionieren.
Muss aber eigentlich unter Linux auch so gewesen sein?

Auf jeden Fall bildet Java packages auf Verzeichnisse ab, was man ggf. berücksichtigen muss.
 
Zuletzt bearbeitet:

Thallius

Top Contributor
Bedenke, dass unter Windows Pfade mit \ verbunden werden, während sie unter Linux mit / verbunden werden. Eventuell hast Du da ein Problem bei Deine Konfiguration.

Und deshalb im Code auch immer schön File.seperator benutzen ;)

Gruß

Claus
 

zimtstern

Mitglied
Vielen Dank, arilou und Thallius!
Das mit dem Punkt war's. Unter Linux werden nur slashs benutzt. Dass Windows backslashs braucht wusste ich, aber das mit dem Punkt... :oops:
Danke nochmal, damit wär mein Problem dann geklärt.
 

zimtstern

Mitglied
Leider habe ich das Problem wieder. Beim Ausführen einer einfachen HalloWelt hat das mit dem Punkt geklappt, aber bei meinem totalen Dea nicht. Das kann ja theoretisch dann nur am Quellcode liegen, der ist aber richtig bzw. unter Linux funktioniert alles bestens.
Anhang anzeigen 7016

ich nehme mal an, das sollte in einen neuen Thread, aber in welche Forenkategorie?
 
Zuletzt bearbeitet:

zimtstern

Mitglied
Durch das Schlüsselwort package kann eine Klasse (aber auch ein Interface) einem Package zugeordnet werden. Ziel dieser Zuordnung ist es, eine bessere Strukturierung der Klassen zu erhalten. Klassen, die logisch in irgendeiner Art zusammengehören, die einem gemeinsamen Zweck dienen, werden dem gleichen Package zugeordnet.

Das wusste ich bereits. Wo ist das Problem?
Und wie hilft mir das jetzt bitte beim Lösen meines Problems?
 

arilou

Bekanntes Mitglied
Java bildet packages als (Unter-)Verzeichnisse im Dateisystem ab.
D.h. .class-Dateien müssen schon mal diesbezüglich korrekt eingeordnet sein.
Zusätzlich (wenn die Klasse mit der .main in einem package steckt) muss man beim Aufruf das package mit angeben:
java package1.subpackage.HauptKlasse
Und hier werden dann Punkte verwendet (anstatt '\' oder gar '/'). Und man muss sich (als "aktuelles Verzeichnis") im "package-root" befinden.

Anders ausgedrückt: Es gibt Gründe, warum Gott und die Welt eine IDE verwendet; und warum "fertige" Java-Programme als .jar verpackt verteilt werden... spart einfach einen großen Haufen Fehlermöglichkeiten.
 
Zuletzt bearbeitet:

zimtstern

Mitglied
Hallo arilou.
Java bildet packages als (Unter-)Verzeichnisse im Dateisystem ab.
D.h. .class-Dateien müssen schon mal diesbezüglich korrekt eingeordnet sein.
Die class-Dateien sind doch korrekt eingeordnet. Mit javac -d sage ich ihm, wo die class gespeichert werden soll, und dort werden dann package und subpackes der .java für die .class übernommen.
"sources\halloWelt\HalloWelt.java" --> "classes\halloWelt\HalloWelt.class"
Das funktioniert unter Linux und unter Windows genauso. Das ist also nicht das Problem.
Zusätzlich (wenn die Klasse mit der .main in einem package steckt) muss man beim Aufruf das package mit angeben:
java package1.subpackage.HauptKlasse
Das ist mir schon klar und das tue ich doch auch: "java -cp java\classes" sagt ihm, wo Klassen im allgemeinem sind und "automaten\totalerDea\dea1\apps.UI_Dea1" gibt package und auszuführende Klasse an. Unter Linux funktioniert das einwandfrei, möglicherweise ja unter Windows nicht. Wenn ich allerdings direkt ins Verzeichnis "apps" gehe und dann "java UI_Dea1" befehle, bekomme ich denselben Fehler! Daran kann es also auch nicht liegen.
(Ansonsten befinde ich mich natürlich immer im package-root)

Anders ausgedrückt: Es gibt Gründe, warum Gott und die Welt eine IDE verwendet; und warum "fertige" Java-Programme als .jar verpackt verteilt werden... spart einfach einen großen Haufen Fehlermöglichkeiten.
Meiner Meinung nach ist das keine besonders gute Argumentation. Ich könnte ja genauso sagen: "Unter Linux funktioniert alles einwandfrei, nur Windows macht Probleme, benutzt nie wieder Windows!" Ich verstehe deine Ansicht, aber das hilft mir nicht weite.
Mir zu einer IDE zu raten, ist ja keine Lösung meines Problems (die ich ja aber möchte), sondern nur eine Alternative. Und danach habe ich nicht gefragt. :)


LG, Zimtstern
 

arilou

Bekanntes Mitglied
Die class-Dateien sind doch korrekt eingeordnet. Mit javac -d sage ich ihm, wo die class gespeichert werden soll, und dort werden dann package und subpackes der .java für die .class übernommen.
"sources\halloWelt\HalloWelt.java" --> "classes\halloWelt\HalloWelt.class"
Das funktioniert unter Linux und unter Windows genauso. Das ist also nicht das Problem.

[...]

Das ist mir schon klar und das tue ich doch auch: "java -cp java\classes" sagt ihm, wo Klassen im allgemeinem sind und "automaten\totalerDea\dea1\apps.UI_Dea1" gibt package und auszuführende Klasse an. Unter Linux funktioniert das einwandfrei, möglicherweise ja unter Windows nicht. Wenn ich allerdings direkt ins Verzeichnis "apps" gehe und dann "java UI_Dea1" befehle, bekomme ich denselben Fehler! Daran kann es also auch nicht liegen.
(Ansonsten befinde ich mich natürlich immer im package-root)
Da liegt nunmal der Hund begraben; du hast einen Denkfehler in deinen Aufrufen.
Ein Teil der Pfadangabe ist Pfad_zur_PackageRoot, der nachfolgende Teil ist dann aber Package_Einordnung. Und genau an dieser Trennstelle muss der java-Aufruf trennen mittels
-cp Pfad_zur_PackageRoot
und
Package_Einordnung.Hauptklasse
. Es ist eben nicht zulässig, einfach eine Verzeichnisebene "tiefer" das Javaprogramm starten lassen zu wollen (also sich eigentlich schon in einem Package zu befinden) oder den hinteren Teil des Classpath nachträglich "zu einem Package zu erklären".
Unter Windows werden Verzeichnisse (-cp) mittels '\' untergliedert; java untergliedert packages aber mit '.' .
Möglich, dass JVMs unter Linux da etwas "flexibler" sind, da bin ich nicht so vertraut damit.
 
Zuletzt bearbeitet:

zimtstern

Mitglied
Hallo arilou!

Ein Teil der Pfadangabe ist Pfad_zur_PackageRoot, der nachfolgende Teil ist dann aber Package_Einordnung. Und genau an dieser Trennstelle muss der java-Aufruf trennen mittels
-cp Pfad_zur_PackageRoot
und
Package_Einordnung.Hauptklasse
Möglich, dass ich dich da falsch verstanden hab und du meinst, dass man das genau SO nicht macht, aber meiner Meinung nach trennt mein Befehl zwischen Pfad_zur_PackageRoot und Package_Einordnung.Hauptklasse
Code:
-cp java\classes
und
Code:
automaten\totalerDea\dea1.Dea1
oder irre ich mich da? zumindest beginnt das package mit "automaten" wie ja auch in meinem Befehl.
Es ist eben nicht zulässig, einfach eine Verzeichnisebene "tiefer" das Javaprogramm starten lassen zu wollen (also sich eigentlich schon in einem Package zu befinden) oder den hinteren Teil des Classpath nachträglich "zu einem Package zu erklären".
Richtig, ist ja auch logisch. Das hätte ich auch selber merken können, keine Ahnung wie ich darauf kam, pure Verzweilung nehme ich an :bloed:
Unter Windows werden Verzeichnisse (-cp) mittels '\' untergliedert; java untergliedert packages aber mit '.' .
Die Aussage verstehe ich ehrlich gesagt nicht. :bahnhof:
"-cp" bzw. "-classpath" ist doch javac/java spezifisch. Unterteilt java packages also vollständig mit "." beim Ausführen? --> "automaten.totalerDea.dea1.Dea1"
so ist ein packages ja im Quellcode angegeben.
Möglich, dass JVMs unter Linux da etwas "flexibler" sind, da bin ich nicht so vertraut damit.
Also eigentlich dürfte sich eine JVM unter Linux ja nicht von der unter Windows unterscheiden, nur ist die Syntax vom Terminal und cmd unterschiedlich (darüber stolpere ich ja schon von Anfang an)

Es ist echt so deprimierend im Urschleim rumzuwühlen :(
Also mittlerweile ist ja nun klar geworden, dass ich einfach nicht weiß, wie ich`s richtig machen soll. Wie würdest du denn den Befehl schreiben?

Liebe Grüße,
zimtstern
 

arilou

Bekanntes Mitglied
Unter Windows werden Verzeichnisse (-cp) mittels '\' untergliedert; java untergliedert packages aber mit '.' .
Die Aussage verstehe ich ehrlich gesagt nicht. :bahnhof:
"-cp" bzw. "-classpath" ist doch javac/java spezifisch. Unterteilt java packages also vollständig mit "." beim Ausführen? --> "automaten.totalerDea.dea1.Dea1"
so ist ein packages ja im Quellcode angegeben.
Genau richtig. In der Package_Unterteilung gibt es keine '/' oder '\', nur '.' - auch beim Aufruf von der Kommandozeile.
(Gilt für die Standard-Oracle JVM unter Windows. Nach Deiner Aussage akzeptiert die Linux-JVM auch '/' statt '.' .)

Also eigentlich dürfte sich eine JVM unter Linux ja nicht von der unter Windows unterscheiden, [...]
Denkfehler. Die JVMs dürfen sich nicht unterscheiden bzgl. des Ausführens von Bytecode. Sie dürfen sich aber durchaus unterscheiden darin, wie sie selbst aufgerufen werden. Auch dürfen sie verschiedene Garbage Collectoren haben, oder (intern) verschiedene Implementierungen der Standardklassen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P for Schleife, gleiches ergebnis mit und ohne {} Java Basics - Anfänger-Themen 13
X Eclipse führt immer gleiches Programm aus Java Basics - Anfänger-Themen 4
K Stack und immer gleiches Objekt Java Basics - Anfänger-Themen 11
P Standard resources-Verzeichnis ändern Java Basics - Anfänger-Themen 9
J Alle .java Dateien von einem Verzeichnis in eine Zip speichern Java Basics - Anfänger-Themen 2
J Alle Dateien aus einem Verzeichnis laden Java Basics - Anfänger-Themen 10
S Verzeichnis Lese-Berechtigung entziehen Java Basics - Anfänger-Themen 1
B Name von Verzeichnis bekommen - Files von einem Ordner auslesen Java Basics - Anfänger-Themen 4
S Image Datei selektieren und in Projekt Verzeichnis abspeichern/kopieren Java Basics - Anfänger-Themen 16
F Verzeichnis synchronisieren Java Basics - Anfänger-Themen 3
R Input/Output Dateinamen aus Verzeichnis in Datei schreiben Java Basics - Anfänger-Themen 3
M java.io.FileNotFoundException trotz dass Verzeichnis korrekt angegeben ist! Java Basics - Anfänger-Themen 20
M Erste Schritte Ordner im selber Verzeichnis wählen Java Basics - Anfänger-Themen 1
J Lokales Verzeichnis -> Globales Verzeichnis Java Basics - Anfänger-Themen 10
D Input/Output Ordner aus .Jar in das Verzeichnis der .Jar kopieren Java Basics - Anfänger-Themen 1
B Dateien aus dem "resource" - Folder kopieren in Verzeichnis Java Basics - Anfänger-Themen 9
B "Vor" Verzeichnis bekommen Java Basics - Anfänger-Themen 1
I Automatisch Verzeichnis erstellen bei File erstellen Java Basics - Anfänger-Themen 5
A Datei im erstelltem Verzeichnis erstellen? Java Basics - Anfänger-Themen 1
Traxx JDK installieren .java nur im Java\bin Verzeichnis ausführbar Java Basics - Anfänger-Themen 22
S 3 Fragen, Verzeichnis, GridLayout psoitionieren, Werte für JSpinner Java Basics - Anfänger-Themen 2
D Input/Output Verständnisfrage Verzeichnis-/Dateiliste erstellen & Dateikonvertierung Java Basics - Anfänger-Themen 1
K Bin-Verzeichnis Java Basics - Anfänger-Themen 4
E Bild per Verzeichnis/JFileChooser auf JPanel laden Java Basics - Anfänger-Themen 13
kaoZ Input/Output Verzeichnis Inhalt in combobox ausgeben Java Basics - Anfänger-Themen 8
M Verzeichnis ausgeben mit Unterverzeichnissen und einzelnen Dateien Java Basics - Anfänger-Themen 18
S Darüberliegende Verzeichnis ansprechen Java Basics - Anfänger-Themen 3
C Datei in bestimmtes Verzeichnis speichern Java Basics - Anfänger-Themen 2
E Erste Schritte Verzeichnis auslesen, Dateinamen in Array speichern :-( Java Basics - Anfänger-Themen 7
P javac Verzeichnis Java Basics - Anfänger-Themen 2
N Input/Output mit FileDialog Verzeichnis wechseln Java Basics - Anfänger-Themen 20
eLogic Input/Output Liest Verzeichnis nicht aus??? Java Basics - Anfänger-Themen 6
G Bilder aus dem Projekt Verzeichnis werden n. angezeigt Java Basics - Anfänger-Themen 7
B Files aus Verzeichnis zählen Java Basics - Anfänger-Themen 9
M Verzeichnis öffnen? Java Basics - Anfänger-Themen 5
dognose Verzeichnis rekursiv auslesen / beschränkte Apis. Java Basics - Anfänger-Themen 6
J Verzeichnis auslesen und festgelegte Anzahl Bilder zeichnen Java Basics - Anfänger-Themen 4
G Verzeichnis auslesen mit sehr sehr vielen Bildern Java Basics - Anfänger-Themen 6
M Verzeichnis verschieben Java Basics - Anfänger-Themen 5
H Verzeichnis Java Basics - Anfänger-Themen 9
R Verzeichnis feststellen Java Basics - Anfänger-Themen 14
O Aktuelles Verzeichnis Runtime.getRuntime().exec Java Basics - Anfänger-Themen 6
L Datei kopieren in anders verzeichnis geht nicht Java Basics - Anfänger-Themen 17
G Dateien im Verzeichnis anzeigen lasssen Java Basics - Anfänger-Themen 7
M Systembefehl Verzeichnis öffnen Java Basics - Anfänger-Themen 5
G Verzeichnis herausfinden Java Basics - Anfänger-Themen 3
N Verzeichnis auf genügend Festplattenplatz überprüfen - Linux Java Basics - Anfänger-Themen 15
M Eclipse: mehrere Versionen einer *.class im Verzeichnis Java Basics - Anfänger-Themen 3
G Verzeichnis von *.class ausgeben lassen Java Basics - Anfänger-Themen 3
G in Verzeichnis auf gleicher Ebene wechseln Java Basics - Anfänger-Themen 4
M Dateien aus Verzeichnis filtern, aber nicht nach Endung Java Basics - Anfänger-Themen 59
A dateiname aus verzeichnis auslesen Java Basics - Anfänger-Themen 2
G Wie finde ich das Verzeichnis von meinen Java Projekt? Java Basics - Anfänger-Themen 7
S String für das java jre home verzeichnis Java Basics - Anfänger-Themen 3
A Gibt es standardmässig in Java einen Verzeichnis-Listener? Java Basics - Anfänger-Themen 6
T Dateien aus einem Verzeichnis in eine Textdatei schreiben Java Basics - Anfänger-Themen 3
E JFileChooser -> Verzeichnis setzen Java Basics - Anfänger-Themen 10
M window verzeichnis öffnen Java Basics - Anfänger-Themen 6
zilti In Java das Verzeichnis wechseln Java Basics - Anfänger-Themen 21
Q Prüfen, ob ein FTP-Verzeichnis vorhanden ist Java Basics - Anfänger-Themen 2
M Importieren einer Javadatei aus einem anderen Verzeichnis Java Basics - Anfänger-Themen 4
G Reflection - Klasse laden aus anderem Verzeichnis Java Basics - Anfänger-Themen 4
G Windows-Verzeichnis ermitteln Java Basics - Anfänger-Themen 7
M Verzeichnis der main Klasse herausfinden Java Basics - Anfänger-Themen 7
M Datei ins aktuelle Verzeichnis speichern Java Basics - Anfänger-Themen 5
loadbrain relatives Verzeichnis angeben Java Basics - Anfänger-Themen 3
P Verzeichnis meines Programms Java Basics - Anfänger-Themen 4
S Verzeichnis auf Existenz prüfen + Inhalt holen Java Basics - Anfänger-Themen 9
F Jar-"Home" Verzeichnis Java Basics - Anfänger-Themen 5
G aktuelles verzeichnis finden Java Basics - Anfänger-Themen 5
M Namen der Dateien in einem bestimmten Verzeichnis erhalten Java Basics - Anfänger-Themen 4
P Wieso wird der komplette Inhalt im verzeichnis nicht gelösch Java Basics - Anfänger-Themen 5
Bierhumpen verzeichnis auslesen? Java Basics - Anfänger-Themen 13
S Verzeichnis darstellen Java Basics - Anfänger-Themen 3
G Auf File / Verzeichnis innerhalb eines jars zugreifen Java Basics - Anfänger-Themen 2
T Dateien/Ordner in einem Verzeichnis zählen Java Basics - Anfänger-Themen 13
G das aktive Verzeichnis abfragen Java Basics - Anfänger-Themen 4
F Home-Verzeichnis des Benutzers ändern Java Basics - Anfänger-Themen 4
E In welches Verzeichnis müssen selbsterstellte Klassen ? Java Basics - Anfänger-Themen 6
L Mit File erzeugtes Verzeichnis ist schreibgeschützt Java Basics - Anfänger-Themen 3
H Verzeichnis lesen, und nur unterverzeichnisse heraus filtern Java Basics - Anfänger-Themen 6
M Paket aus beliebigem Verzeichnis importieren Java Basics - Anfänger-Themen 9
G Verzeichnis kopieren Java Basics - Anfänger-Themen 2
X Verzeichnis Probs mit Klassen Java Basics - Anfänger-Themen 3
S Verzeichnis auslesen! Java Basics - Anfänger-Themen 3
R dateien in einem verzeichnis einlesen Java Basics - Anfänger-Themen 3
T Unter Windows mit Java ein Verzeichnis erstellen? Java Basics - Anfänger-Themen 4
M Filecooser - Verzeichnis ohne "" Laufwerke mit &q Java Basics - Anfänger-Themen 2
S Ein Verzeichnis anpollen Java Basics - Anfänger-Themen 8
M Dateien in einem Verzeichnis zählen Java Basics - Anfänger-Themen 21
B Angabe import-Verzeichnis & Error704:cannot access direc Java Basics - Anfänger-Themen 6
G Dateinamen aus einem Verzeichnis ausgeben Java Basics - Anfänger-Themen 3
M alle Files aus einem Verzeichnis finden Java Basics - Anfänger-Themen 15
G Verzeichnis auslesen und alle Unterordner/Dateien speichern Java Basics - Anfänger-Themen 9
A Windows tmp-Verzeichnis ermitteln Java Basics - Anfänger-Themen 6
W Methoden java map ersatz für c++map Java Basics - Anfänger-Themen 2
A csv Reader für Java? Java Basics - Anfänger-Themen 27
S Bitte Ratschläge für Console-MenuFührung... Java Basics - Anfänger-Themen 20
tomzen Java Unterstützung für exel dateien installieren. Java Basics - Anfänger-Themen 2
M Code aus IntelliJ in "Textform" für Word-Paper? Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben