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

Java ausführung Automatisieren

Dieses Thema im Forum "Unix & Terminal" wurde erstellt von Bilbao, 06.01.08.

  1. Bilbao

    Bilbao Wohlschmecker aus Vierlanden

    Dabei seit:
    25.01.06
    Beiträge:
    238
    Hi Leute!

    Ich lerne zurzeit Java Programmierung in der Schule
    Wenn ich jetzt zuhause ein Java Programm schreibe und es starten will geh ich in Terminal geh zur Location des Files mach Javac Filename und dann Java Filename.


    So weit so gut...

    Jetzt die Frage: Unter Windows weiss ich kann man zumindest das starten per *.bat datei automatisieren. Dazu klicke ich doppelt auf diese datei und Voila das programm fängt an zu laufen. Mein Lehrer meinte unter Unix system funktioniert sowas mit shell scripten doer so :S

    Kann mir einer mal erklären was genau ich dafür machen muss (die shell datei wird im sleben verzeichen ligen wie die .class datei (so spar ich mir di Pfad bezeichnung (zumindest bei Windows)))

    Vielen Dank schonmal im Voraus
     
  2. Dr. Koffein

    Dr. Koffein Empire

    Dabei seit:
    19.01.05
    Beiträge:
    89
    Shellskript

    Hallo Bilbao,

    die Antwort auf Deine Frage ist ganz einfach. Mit einem simplen Shell-Skript kannst Du einen Wrapper für Dein Javaprogramm schreiben, so dass ein einfaches Aufrufen des Shellskripts Dir den Aufruf von Java erleichtert. Ein entsprechendes Shellskript sieht dann folgendermaßen aus:

    Code:
    #! /bin/bash
    
    java JavaKlasse
    
    Dieses Skript speicherst Du dann (üblicherweise mit der Endung .sh, aber nicht zwingend), z.B. als "JavaKlasse.sh".

    Diese Datei musst Du noch als ausführbar markieren, damit dies von der Shell als Skript erkannt wird:

    Code:
    > chmod +x JavaKlasse.sh
    
    Anschliessend kannst Du Dein Programm per Shellaufruf (./JavaKlasse.sh) starten. Ich hoffe, meine Beschreibung hat Dir weitergeholfen.

    Viele Grüße,
    drk
     
    #2 Dr. Koffein, 06.01.08
    Zuletzt bearbeitet: 07.01.08
  3. tfc

    tfc Ontario

    Dabei seit:
    21.07.07
    Beiträge:
    348
    Oder Du gibst dem Shellscript die Dateiendung ".command".
    So reagiert das Script auch auf Mausklick und das käme dann der Batch-Methode unter Windows sehr nahe.

    Wobei eine immer offene Konsole sowieso praktisch ist und das nicht nötig wäre.
     
  4. Bilbao

    Bilbao Wohlschmecker aus Vierlanden

    Dabei seit:
    25.01.06
    Beiträge:
    238
    und wo genau schreib ich das jetzt? bei windows ha ich immer einfach ne textdatei genommen was reingeschreiben und dann umbenannt...

    DAnke schon mal für die Antworten... Aber sollte schon wie tfc beschireben per mausklick ausführbar sein und eben nicht Pfadgebunden :D:D

    Ne bergriffserklärung wäre auch nicht schelcht (also der einzelnen schritten) (was chmod -x ist und so oder das /bin/bash)


    Hab das nebenbei versucht mit dem .command

    problem ist es geht auf dann kommt ein fehler und dann Prozess beendet. Wenn ich es aber wie immer übers Terminal aufrufe gehts nur net mit dem .command datei
     
    #4 Bilbao, 06.01.08
    Zuletzt bearbeitet: 06.01.08
  5. quarx

    quarx Hadelner Sommerprinz

    Dabei seit:
    17.04.05
    Beiträge:
    8.541
    Java-Programme mit grafischer Oberfläche kannst Du übrigens einfach durch Doppelklick auf die *.class-Datei starten. ;)
     
  6. Bilbao

    Bilbao Wohlschmecker aus Vierlanden

    Dabei seit:
    25.01.06
    Beiträge:
    238
    Sind aber zurzeit alles noch programm die keine Grafische oberfläche haben :D
     
  7. Dr. Koffein

    Dr. Koffein Empire

    Dabei seit:
    19.01.05
    Beiträge:
    89
    In eine Textdatei...

    Ein bisschen was sollte man immer selber tun:
    http://de.wikipedia.org/wiki/Shebang
    http://www.bin-bash.de/index.php
    http://de.wikipedia.org/wiki/Chmod


    Ein Fehler? Das mindeste wäre es, denn Fehler mal zu beschreiben :)
    Ich gehe mal davon aus, dass der Fehler lautet wie

    Code:
    Exception in thread "main" java.lang.NoClassDefFoundError: <KLASSENNAME>
    
    Das liegt daran, dass dein Command-Skript nicht im entsprechenden Directory aufgerufen wird. Du musst also den Classpath in Deinem Skript entsprechend setzen, damit Deine Javaklasse auch gefunden wird. Erläuterungen dazu finden sich hier: http://www.kevinboone.com/classpath.html

    Dein Skript müsste also wie folgt aussehen (es ist die Datei skript.command, die Du einfach mit einem Texteditor erstellst):

    Code:
    #!/bin/bash
    
    java -cp <PFAD_ZUM_VERZEICHNIS_DEINER_JAVA_KLASSE> <KLASSENNAME>
    
    also z.B.

    Code:
    #!/bin/bash
    
    java -cp ~/Desktop Test
    
    (wenn beispielsweise Deine Klasse Test.class auf Deinem Schreibtisch liegt)


    Viele Grüße,
    drk
     
    #7 Dr. Koffein, 07.01.08
    Zuletzt bearbeitet: 07.01.08
  8. Bilbao

    Bilbao Wohlschmecker aus Vierlanden

    Dabei seit:
    25.01.06
    Beiträge:
    238
    ja aber genau das wollte ich ja vermeiden.....
    ich bins halt von windows gewöhnt das automatisch immer erst in dem verzeichnis sucht wo sich die datei befindet die grad geöffnet wurde...

    denn wenn ich das so mache muss ich das für jeden mac erstml umschreiben oder bei jedem mac ins selbe verzeichnis kopieren
     
  9. Skeeve

    Skeeve Pomme d'or

    Dabei seit:
    26.10.05
    Beiträge:
    3.121
    Probier mal
    Code:
    #!/bin/sh
    here=`dirname $0`
    cd $here
    java meinjavaprogramm
    
    Das sollte dann eigentlich klappen, da es zuvor in das passende Verzeichnis wechselt.
     
  10. Bilbao

    Bilbao Wohlschmecker aus Vierlanden

    Dabei seit:
    25.01.06
    Beiträge:
    238
    habs jetzt so gemacht wie Skeeve

    dann bekomm ich das hier wenn ich matrix.class mache

    und das hier ohne .class am ende (denn beim aufrufen normal geb ich es ja auch ohne die endung einfach nur java Matrix ein )
     
  11. Skeeve

    Skeeve Pomme d'or

    Dabei seit:
    26.10.05
    Beiträge:
    3.121
    Weil ein Blank im Namen steht. :(
    Code:
    #!/bin/sh
    here=`dirname "$0"`
    cd "$here"
    java meinjavaprogramm
     
  12. Bilbao

    Bilbao Wohlschmecker aus Vierlanden

    Dabei seit:
    25.01.06
    Beiträge:
    238
    Perfekt jetzt gehts vielen vielen dank :D

    gibt es jetzt noch ne möglichkeit das diese datei sich sleber erstellt mit automator doer so?? das ich dem das rohmodel gebe und der dann selber imer nur den datei namen ändert??

    (ja ich weiss ich will mal wieder zu viel :p )
     
  13. Skeeve

    Skeeve Pomme d'or

    Dabei seit:
    26.10.05
    Beiträge:
    3.121
    Bitte sehr, bitte gleich...
    1. In den Script Editor kopieren
    2. Als Programm JavaStarterMaker sichern
    3. Ein oder mehrere .class Dateien drauffallen lassen
    4. Für jede DATEI.class wird eine DATEI erstellt, die die .class aufruft
     
  14. Bilbao

    Bilbao Wohlschmecker aus Vierlanden

    Dabei seit:
    25.01.06
    Beiträge:
    238
    WOW vielen vielen dank Skeeve

    (wenn du mir noch schnell sagst was für einen script editor du meinst :D wäre das perfekt) (oder muss ich einfach nur ne txt datei damit erstellen??)

    edit: habs jetzt geschafft nur wenn ich jetzt was fallen lasse dann erstellt er mir ne datei die terminal so nicht öffnen kann...
    dann hab ich einfach der erstellten datei nen .command am ende verpasst und dann kam das
     
    #14 Bilbao, 07.01.08
    Zuletzt bearbeitet: 07.01.08
  15. Skeeve

    Skeeve Pomme d'or

    Dabei seit:
    26.10.05
    Beiträge:
    3.121
    Ich dachte, Du wolltest die von Kommandozeile aus starten. Dazu braucht's kein ".command". Den Fehler habe ich hoffentlich hier mit korrigiert. Wenn Du unbedingt willst, kannst Du die property "with_command" auf true setzen, dann hängt er die per default an.
     
  16. Bilbao

    Bilbao Wohlschmecker aus Vierlanden

    Dabei seit:
    25.01.06
    Beiträge:
    238
    BIG BIG THX

    kannst du das mal mit comments versehen damit ich versteh in welchel line was gemacht wird??
     
  17. MacMark

    MacMark Biesterfelder Renette

    Dabei seit:
    01.01.05
    Beiträge:
    4.709
  18. Skeeve

    Skeeve Pomme d'or

    Dabei seit:
    26.10.05
    Beiträge:
    3.121
    Und hier ist noch eine Version, die ein .app draus macht. Dabei wird das Classfile in die app kopiert. Somit ist die .app beliebig kopierbar.

    Du mußt das wie zuvor in den ScriptEditor kopieren aber diesmal als "Programm Bundle" sichern unter dem namen "class2app"

     
    #18 Skeeve, 07.01.08
    Zuletzt bearbeitet: 07.01.08
  19. Skeeve

    Skeeve Pomme d'or

    Dabei seit:
    26.10.05
    Beiträge:
    3.121
    ;) Das ist AppleScript gemischt mit shell script. Das ist mir jetzt, ehrlich gesagt, zu aufwendig. Ein bischen was sollst Du auch selbst tun. Mir hates Spaß gemacht, das zu programmieren, aber jetzt jede Zeile zu kommentieren macht keinen Spaß. Wenn Du spezielle Fragen hast, dann kannst Du gerne fragen und ich versuche das dann zu erklären.
     
  20. MacMark

    MacMark Biesterfelder Renette

    Dabei seit:
    01.01.05
    Beiträge:
    4.709
    Es genügt, mit jar ein JAR-Archiv zu erzeugen, daß die Klassen enthält. Darin sollte META-INF/MANIFEST.MF mit der Zeile "Main-Class: MeineMainKlasseSeineNameHier" enthalten sein. Ein Doppelklick im Finder startet das Programm dann, egal ob graphisch oder nicht.

    Beispiel für Manifest-Datei extrahieren:
    jar xf /Developer/Examples/Java/JavaAdvancedImaging/JAIDemo/JAIDemo.jar META-INF/MANIFEST.MF

    Doppelklick auf beispielsweise JAIDemo.jar startet das Java-Programm. Zu finden in /Developer/Examples/Java/JavaAdvancedImaging/JAIDemo/
     

Diese Seite empfehlen