• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Java-Programme im Terminal starten

Registriert
19.01.07
Beiträge
116
Hallo Community!
Habe ein paar kleine, einfache Java-Programme geschrieben und würde diese gerne vom Terminal aus starten. Bisher habe ich sie ausschließlich innerhalb der Eclipse-IDE zum Laufen gebracht.
Die Programmdateien sind im 'Workbench' -Ordner abgelegt. Eclipse erstellt für jede Anwendung zwei Dateien: eine mit der Ende .java und eine mit .class.
Vor diesem Hintergrund stellen sich mir als Unix-Nobody (und Java-Anfänger) folgende Fragen:
a) Ist die 'programmname.class' -Datei die compilierte, also in Bytecode übersetzte Datei, welche ausgeführt werden kann?
b) Warum öffnet sich bei mir automatisch 'Dreamweaver' wenn ich auf diese Datei doppelklicke? Die Classdatei steht mit dem 'Dreamweaver'-Symbol im Ordner, obwohl ich beim Entwickeln nichts mit 'Dreamweaver' zu tun hatte.
c) Ist es ohne fundierte Unix-Kenntnisse möglich, ein Java-Programm vom Terminal aus zu starten? Wenn ja, wie funktioniert es? Falls nein, könnt Ihr mir hilfreiche Links nennen?

Ok, sind wahrscheinlich ziemlich viel Fragen auf einmal! Ich bedanke mich schon mal im Voraus für alle, die sich um Antworten bemühen!:innocent:
 

Bölzebub

Querina
Registriert
27.05.05
Beiträge
180
a) Ist die 'programmname.class' -Datei die compilierte, also in Bytecode übersetzte Datei, welche ausgeführt werden kann?
Ja.
b) Warum öffnet sich bei mir automatisch 'Dreamweaver' wenn ich auf diese Datei doppelklicke? Die Classdatei steht mit dem 'Dreamweaver'-Symbol im Ordner, obwohl ich beim Entwickeln nichts mit 'Dreamweaver' zu tun hatte.
Gute Frage. Anscheinend meint Dreamweaver, damit etwas anfangen zu können. Darüber, dass sich das Programm aber als Standard einstellt, sollte man sich mal beim Hersteller beschweren. So was kommt immer mal wieder vor, vor allem bei Programmen, die es auch für Windows gibt. Da ist so was wohl üblich.
Im Normalfall werden class-Dateien mit dem Jar Launchcher geöffnet. Das Programm liegt in /System/Library/Core Services/. Das funktioniert allerdings auch nur, wenn (vereinfacht ausgedrückt) das Java-Programm eine Oberfläche hat.
c) Ist es ohne fundierte Unix-Kenntnisse möglich, ein Java-Programm vom Terminal aus zu starten? Wenn ja, wie funktioniert es? Falls nein, könnt Ihr mir hilfreiche Links nennen?
Das sollte bei einfachen Programmen kein Problem sein. einfach im Terminal "cd " eingeben und dann den Ordner, in dem die class-Datei liegt, ins Terminalfenster ziehen und mit Return bestätigen. Danach "java " und den Dateinamen ohne ".class" eingeben. Wenn das nicht funktioniert braucht man aber eher Java- als Unix-Kenntnisse.
 
Registriert
19.01.07
Beiträge
116
Bölzebub, - ich danke Dir für die präzise Antwort! Mal sehen ob ichs auf die Reihe kriege...
 
Registriert
19.01.07
Beiträge
116
Schade, scheint doch nicht so einfach zu sein - ich bekomme folgende Meldungen im Terminal:
aaron:~ aaron$ cd/Users/aaron/Documents/workspace/hallo/
-bash: cd/Users/aaron/Documents/workspace/hallo/: No such file or directory
aaron:~ aaron$ java HalloWelt
Exception in thread "main" java.lang.NoClassDefFoundError: HalloWelt


Das Programm kann nicht ausgeführt werden, da er die Datei nicht findet.

Der Programmcode lautet:
public class HalloWelt {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Hallo Welt!");
}

}
 

Demo

Süssreinette (Aargauer Herrenapfel)
Registriert
02.04.04
Beiträge
411
Schade, scheint doch nicht so einfach zu sein - ich bekomme folgende Meldungen im Terminal:
aaron:~ aaron$ cd/Users/aaron/Documents/workspace/hallo/
-bash: cd/Users/aaron/Documents/workspace/hallo/: No such file or directory


muss

Code:
cd /Users/aaran/Documents/workspace/hallo/

heissen. Du hast kein Leerzeichen zwischem dem Befehl (cd) und dem Pfad gelassen.
 
Registriert
19.01.07
Beiträge
116
Danke für den Tipp! Mit dem 'HalloWelt'-Programm hat´s jetzt geklappt. Bei den anderen Beispielen kommt leider eine lange Fehlermeldung.
Hab die Datei genauso zu öffnen versucht wie die 'HalloWelt'-Datei und in Eclipse funktionieren die Programme.

Exception in thread "main" java.lang.NoClassDefFoundError: Hashtable1 (wrong name: komplexe_datenstrukturen/Hashtable1)

at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
 

Demo

Süssreinette (Aargauer Herrenapfel)
Registriert
02.04.04
Beiträge
411
Kannst Du mal Deine kompletten Pfadangaben mit posten - also wie genau Du versucht hast hashtable1 zu starten ?

Du scheinst den Klassennamen falsch geschrieben zu haben. Deshalb waere es gut zu wissen, wie genau Du beim starten vorgegangen bist.

Code:
java komplexe_datenstrukturen/Hashtable1
 
Registriert
19.01.07
Beiträge
116
Kannst Du mal Deine kompletten Pfadangaben mit posten - also wie genau Du versucht hast hashtable1 zu starten ?

Du scheinst den Klassennamen falsch geschrieben zu haben. Deshalb waere es gut zu wissen, wie genau Du beim starten vorgegangen bist.

Code:
java komplexe_datenstrukturen/Hashtable1

Das sieht so aus:
Code:
dslb-084-057-048-216:~/Documents/workspace/Schleifen_und_Kontrollstrukturen/komplexe_datenstrukturen aaron$ cd /Users/aaron/Documents/workspace/Schleifen_und_Kontrollstrukturen/komplexe_datenstrukturen/ 
dslb-084-057-048-216:~/Documents/workspace/Schleifen_und_Kontrollstrukturen/komplexe_datenstrukturen aaron$ java Hashtable1
Exception in thread "main" java.lang.NoClassDefFoundError: Hashtable1 (wrong name: komplexe_datenstrukturen/Hashtable1)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)

Habe den Dateinamen 'Hashtable1' genauso übernommen wie er im Ordner abgespeichert wurde: java Hashtable1 (ohne'.class')
 

quarx

Brauner Matapfel
Registriert
17.04.05
Beiträge
8.444
Du musst aus dem nächsthöheren Verzeichnis starten. Allgemeiner: Wenn die Klasse in einem package liegt (hier komplexe_datenstrukturen), muss man immer aus dem Verzeichnis heraus starten, in dem das package selbst gespeichert ist.
 
Registriert
19.01.07
Beiträge
116
Hab die Datei von 'Schleifen_und_Kontrollstrukturen' aus mit: 'java kompexe_datenstrukturen/Hashtable1' aufgerufen! Und siehe da - es hat geklappt!!!
Tausend Dank für Eure Hilfe!!!