Hallo zusammen,
ich beschäftige mich seit einer Weile mit Java. Jetzt möchte ich die Erstellung von eigenen Packages lernen. Also das ablagen eigener Klassen in eigene Pakete.
In meinem Lehrbuch steht das ich zu Beginn einer Java-Datei die package-Anweisung schreieben muss ("package jav05c.kapitel1;"). Dann erstelle ich die Klasse "MidiOutDevice".
Zitat aus dem Buch "Wenn eine Klasse in einem Paket abgelegt werden soll, so muss die java-Datei immer mit dem Parameter "-d" - directory - kompiliert werden, mit dem ein Zielverzeichnis angegeben wird. Auf den Parameter "-d" hat eine Pfadangabe zu folgen."
Über die Eingabeaufforderung (CMD) habe ich versucht die Klasse mit directory Parameter zu kompilieren, allerdings klappt das bei mir nicht. Warum nicht??
Im Anhang habe ich Sceenshorts von meiner Java-klasse im Editor, meinem Zielverzeichnis und der Fehlermeldung von der CMD.
Über jede Art von Hilfe bin ich dankbar.
Mit freundlichen Grüßen,
Marius
Über die Eingabeaufforderung (CMD) habe ich versucht die Klasse mit directory Parameter zu kompilieren, allerdings klappt das bei mir nicht. Warum nicht??
Das verstehe ich nicht so ganz. Ich habe es so verstanden, dass in meinem Zielverzeichnis (Zielordner "eigeneKlassen") das Paket jav05c mit dem Unterpaket kapitel1 erzeugt wird wenn ich die Klasse mit dem -d Argument kompiliere.
Womit habe ich die -d Argumente vertauscht?
Wenn du anschließend
java Main
aufrufst, gibt es eine Fehlermeldung:
Error: Could not find or load main class Main
Caused by: java.lang.NoClassDefFoundError: eins/zwo/drei/Main (wrong name: Main)
stattdessen musst du also:
java -cp Main Main.java
aufrufen.
Die -d Option ist also nicht so wichtig. Möchtest du eigentlich ein .jar erzeugen?
Ungeachtet dessen , sollte die Verzeichnisstruktur aber wie die Paketstruktur sein. (Das erspart dir solche Fehler womöglich )
Also als erstes ein wichtiges Missverständnis:
Das -d soll beim kompilieren angegeben werden. Kompiliert wird mit javac. Daher kannte der Java Aufruf auch den Parameter -d nicht.
Dann ist ein wichtiger Punkt: Der Package-Name sollte der Verzeichnisstruktur entsprechen. Bei "package jav05c.kapitel1;" sollte die Datei im Verzeichnis jav05c\kapitel1 liegen.
Dann kannst Du in dem Hauptverzeichnis direkt das übersetzen aufrufen:
javac jav05c\kapitel1\MidiOutDevice.java
Danach solltest Du in dem Verzeichnis jav05c\kapitel1 neben der .java Datei auch die .class Datei finden.
Ein Aufruf erfolgt dann mit dem vollen Namen der Klasse, also incl. Package:
java jav05c.kapitel1.MidiOutDevice
Diesen Parameter -d brauchst Du nur, wenn Du die class Dateien an einer anderen haben willst. Es ist also üblich Sourcen und Generierte Dateien voneinander zu trennen. Sourcen liegen z.B. in einem Verzeichnis src und die Ausgabe in out.
Dann wärst du in einem Verzeichnis und hättest z.B. src\jav05c\kapitel1\MidiOutDevice.java für Deine Java Datei und möchtest das Ergebnis in out haben:
javac --source-path src -d out jav05c\kapitel1\MidiOutDevice.java
Generell ist es zwar ok, dass man das übersetzen und starten auf der Kommandozeile einmal durchgeht, aber hier wäre auch meine Meinung, dass man da nicht zu viel Zeit investieren sollte. Es macht Sinn, frühzeitig eine Entwicklungsumgebung zu nutzen. Dabei wäre meine Empfehlung, auf IntelliJ zu setzen (Aber andere IDEs gehen auch wie Eclipse oder Netbeans).
Danke für eure Hilfe. Ich habe mich mit eclipse auseinander gesetzt und jetzt verstehe ich auch die Erstellung von Packages. Außerdem ist mir jetzt auch bewusst wozu Packages gut sind.
Ich bin froh, dass ihr euch den blöden Fragen von Anfängern, wie mir stellt aber am besten lernt man doch wenn man sich mit dem Kram selber beschäftigt.
Beste Grüße