Set Classpath

barb0308

Registriert
Thread Starter
Mitglied seit
01.10.2018
Beiträge
3
Hallo zusammen,

mir ist bewusst, dass eine ähnliche Frage schon gestellt wurde, aber mit der gegebenen Lösung konnte ich nicht arbeiten. Ich arbeite zum ersten Mal mit Java.
Leider bekomme ich folgende Fehlermeldung, wenn ich meine Datei ausführen lassen möchte.
java.lang.ClassNotFoundExcdption:Hamster
in jdk.internal.loader.BuiltinClassLoader.loadClass (Reihe -1)
in jdk.internal.loader.ClassLoaders$appClassLoader.loadClass (Reihe -1)
in java.lang.ClassLoader.loadClass (Reihe -2)
in java.lang.Class.forName0 (Reihe -2)
in java.lang.Class.forName (Reihe -1)

Datei befindet sich in diesem folder:
/desktop/hamster/Hamster.java

Die export CLASSPATH=$CLASSPATH: Funktion und viele andere Vorgehensweisen habe ich probiert und trotzdem bekomme ich immer wieder die obige Fehlmeldung.

Ich arbeite mit macOS High Sierra 10.13.3
Kann mir bitte jemand weiterhelfen?
Danke und VG
 

Madcat

Aktives Mitglied
Mitglied seit
01.02.2004
Beiträge
15.765
Da stimmt offenbar der Pfad zur Klasse nicht. Wie hast du den Pfad denn genau angegeben? Wo liegt das Programm und kann es von da aus mit dem konkreten Pfad da auch hin finden?

Beispiel:

Programm liegt auf dem Desktop.
Pfadname zur Klasse lautet /desktop/myClass/
Klasse liegt tatsächlich in: /user/myUserName/Desktop/myClass/

Ergebnis: Programm findet die Klasse nicht da es vom Desktop aus den Ordner sucht, in dem es schon liegt.
Lösung: Absoluten Pfadnamen für die Klasse angeben.

Was gerne übersehen wird ist das "~" Zeichen, dass vom System zum Userordner aufgelöst wird, typische Pfadnamen können lauten "~/desktop/myClass/", für das "~" wird das System bei der Ausführung "/user/myUserName" eintragen sodass sich als Pfadangabe "/users/myUserName/desktop/myClass/" ergeben wird.

Von Java hab ich sonst wenig bis keine Ahnung, tippe aber auf einen fehlerhaften Pfadnamen.
 

barb0308

Registriert
Thread Starter
Mitglied seit
01.10.2018
Beiträge
3
Hallo,

danke für deine Antwort.
Folgende Befehl gebe ich im Terminal ein:
export CLASSPATH=$CLASSPATH:"/Users/barbarahinrichs/desktop/hamster"

Jedoch geschieht nichts. Ich bekomme immer die gleiche Fehlermeldung.

Wenn ich echo $CLASSPATH eingebe, wird mir nichts angezeigt.
 

ruerueka

Aktives Mitglied
Mitglied seit
04.04.2004
Beiträge
1.507
Ich glaube, dass du an der falschen Stelle suchst...
Du brauchst den Classpath nur, um externe Bibliotheken zu laden, für deine Klassen in deinem Projetk genügt es, den Einstiegspunkt richtig zu setzen.
Also:
du öffnest das Terminal und wechselst auf den Desktop
Code:
cd ~/Desktop
dann rufst du deine Java-Klasse mit der main-Methode auf. Da diese in einem Unterordner liegt, gibst du das mit an.
(Damit das klappt, muss der Ordner als package-Deklaration in der Klasse angegeben sein).
Bei mir sieht das so aus (alles im Terminal, und von Anfang an...):

1) Java-Datei (das Programm) schreiben, ich nehme dafür nano, es geht aber jeder Editor, der Plain Text kann:
Code:
xx@~$ nano hamster/Hamster.java
Code:
package  hamster;
class Hamster{
        public static void main(String[] args){
                System.out.println("Hamster :-)");
        }
}
2) Klasse kompilieren (ausführbaren Bytecode erzeugen):
Code:
xx@~$ javac hamster/Hamster.java
Es wir eine Datei hamster/Hamster.class erzeugt
3) und ausführen (die zweite Zeile enthält bereits die Programmausgabe):
Code:
xx@~$ java hamster/Hamster
Hamster :-)
Eigentlich einfach, wenn man sich daran gewöhnt
- Pakete = Ordner im Dateisystem
- immer "oben" einsteigen, also kompilieren und aufrufen immer von dem Punkt aus, ab dem der Paketpfad losgeht und dabei den Paketpfad mit angeben
- Beim Kompilieren musst du den vollen Dateinamen angeben (mit Endung .java)
- Beim Ausführen wird die Dateiendung ".class" NICHT mit angegeben.

Für aufwändigere Strukturen verwendet man dann ein build-Werzeug zum kompilieren und testen (Apache Ant z.B.) oder eine IDE (Netbeans), die das build-Tool schon mitbringt. Ich finde es aber richtig, im Terminal anzufangen, damit man gleich von Anfang an über die grundlegenden Konzepte stolpert und sie darum auch versteht :)
Viel Spass beim Programmieren!
 

barb0308

Registriert
Thread Starter
Mitglied seit
01.10.2018
Beiträge
3
Hat geklappt. Vielen Dank für die ausführliche Erklärung!