1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Java-Programme im Terminal starten

Dieses Thema im Forum "OS X-Developer" wurde erstellt von Aaron_Horowitz, 23.04.07.

  1. Aaron_Horowitz

    Dabei seit:
    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:
     
  2. Bölzebub

    Bölzebub Querina

    Dabei seit:
    27.05.05
    Beiträge:
    180
    Ja.
    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.
    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.
     
  3. Aaron_Horowitz

    Dabei seit:
    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...
     
  4. Aaron_Horowitz

    Dabei seit:
    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!");
    }

    }
     
  5. Demo

    Demo Süssreinette (Aargauer Herrenapfel)

    Dabei seit:
    02.04.04
    Beiträge:
    411


    muss

    Code:
    cd /Users/aaran/Documents/workspace/hallo/
    heissen. Du hast kein Leerzeichen zwischem dem Befehl (cd) und dem Pfad gelassen.
     
  6. Aaron_Horowitz

    Dabei seit:
    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)
     
  7. Demo

    Demo Süssreinette (Aargauer Herrenapfel)

    Dabei seit:
    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
     
  8. Aaron_Horowitz

    Dabei seit:
    19.01.07
    Beiträge:
    116
    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')
     
  9. quarx

    quarx Hadelner Sommerprinz

    Dabei seit:
    17.04.05
    Beiträge:
    8.541
    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.
     
  10. Aaron_Horowitz

    Dabei seit:
    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!!!
     

Diese Seite empfehlen