Anzeige:
Ergebnis 1 bis 11 von 11

Thema: Systembefehle mit Java ausführen

  1. #1
    jensz
    Gast

    Systembefehle mit Java ausführen

    Hallo,

    hat jemand von Euch ne Ahnung, ob es möglich ist, mit Java Windows Befehle auszuführen. Ich weiß, dass das ganze dann nicht mehr plattformunabhängig ist, aber das will ich ja auch gar nicht...
    Ich möchte aus dem Programm heraus nachher einfach Befehle wie "net use t: lalala" usw. ausführen.

    Danke schonmal!

  2. #2
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    Geht glaub ich... Musst mal nach robots suchen.

    MfG Bischi

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  3. #3
    Registrierter Benutzer Avatar von Waxolunist
    Registriert seit
    19.06.2006
    Ort
    Wien
    Beiträge
    485
    Du suchst nach java.lang.Runtime.

    Robots sind eher für Befehle dazu da, die sagen wir jetzt einen Mausklick oder einen Tastendruck simulieren.
    Spezialitäten heute: PLSQL, TSQL, Java (alles mit Webanwendungen), Groovy, Grails, ASP.NET, Javascript, Python, Django
    Straight through, ohne Umwege ans Ziel

  4. #4
    MW10
    Gast
    @Waxolunist Du suchst nach java.lang.Runtime.

    Auch auf die Gefahr hin das die Frage dumm ist(beschäftige mich erst seit kurzem mit Java), aber:
    Wie bekomm ich das mit "java.lang.Runtime" hin das ich befehle wie net use ausführen kann?

  5. #5
    Registrierter Benutzer
    Registriert seit
    29.09.2006
    Ort
    Helsinki
    Beiträge
    154
    Moin,

    grundsätzlich: Die API-Dokumentation ist Dein Freund, da findest Du alles, was Du brauchst. Ok, für Deinen Fall, hier mal ein Beispiel:

    Code:
    public class Test
    {
    
     public static void main(String[] args)
     {
      try
      {
       Runtime rt = Runtime.getRuntime();
       rt.exec("mkdir Test");
      }
      catch(Exception e)
      {
       System.out.println("Exception");
      }
     }
    
    }
    Bitte drauf achten, der Output des aufgerufenen Prozesses wird unterdrückt, falls Du den brauchst, musst Du in der Dokumentation nachschauen, wie Du den umleiten kannst.

    So long,

    Liberty

    P.S.:
    Ich sitz an einer Linuxmaschine, deshalb mkdir als Beispiel.
    Friedliebender Soldat im ganz persönlichen Auslandseinsatz

  6. #6
    MW10
    Gast
    Jo es klappt , danke für die Hilfe.

  7. #7
    Registrierter Benutzer
    Registriert seit
    29.09.2006
    Ort
    Helsinki
    Beiträge
    154
    Moin,

    schön, dass wir helfen konnten, aber ich habe jetzt mal aus jugendlichem Übermut versucht den Output des Prozesses (und erzählt mir nicht, mkdir hätte keinen Output, ich habe ja genau deswegen jetzt ls genommen ;-) ) auf den ganz normalen System.out umzuleiten, aber ich habe irgendwie ein Brett vorm Kopf.
    Kann mir bitte kurz jemand erklären, wie das geht, danke!

    So long,
    Liberty
    Friedliebender Soldat im ganz persönlichen Auslandseinsatz

  8. #8
    Registrierter Benutzer Avatar von Waxolunist
    Registriert seit
    19.06.2006
    Ort
    Wien
    Beiträge
    485
    Mal so aus der Hüfte geschossen.

    In der API steht, dass dir rt.exec ein Process-Objekt zurückliefert. Das hat ein paar Methoden, wie getOutputStream oder getErrorStream.

    Wär das nicht was?

    mfg, Christian
    Spezialitäten heute: PLSQL, TSQL, Java (alles mit Webanwendungen), Groovy, Grails, ASP.NET, Javascript, Python, Django
    Straight through, ohne Umwege ans Ziel

  9. #9
    Registrierter Benutzer
    Registriert seit
    29.09.2006
    Ort
    Helsinki
    Beiträge
    154
    Moin,

    schon probiert, aber das hat ja eben bei mir nicht funktioniert...

    Ich hab die folgende Konstruktion versucht:

    Code:
    import java.io.PrintStream;
    
    public class Test
    {
    
     public static void main(String[] args)
     {
      try
      {
       Runtime rt = Runtime.getRuntime();
       Process prc = null;
       PrintStream alt = System.out;
       System.setOut(new PrintStream(rt.exec("ls").getOutputStream()));
       System.setOut(alt);
       System.out.println("----Test----");
      }
      catch(Exception e)
      { System.out.println("Exception"); }
     }
    
    }
    Es wird bei Ausführung nur die Testzeile angezeigt...

    Ich glaube, ich mache die ganze Zeit einen ganz entscheidenden Denkfehler im Umgang mit den Streams aber irgendwie komme ich nicht drauf

    So long,
    Liberty

    P.S.:
    Könnte aber auch sein, dass ich irgendetwas mit der Synchronisation der beiden Prozesse übersehen habe, also dass z.B. der ls-Prozess seine Ausgabe schon längst beendet hat, bevor der Stream überhaupt umgeleitet wurde oder irgendetwas anderes in die Richtung...
    P.P.S. @MW10:
    Lass Dich nicht verwirren, diese ganzen Gedankenspielen haben nichts mit Deinem Problem zu tun, solange Du nur einen einfachen Systembefehl loswerden willst, der nicht mit Deinem Java-Programm synchronisiert werden muss, kann Dir das Thema egal sein.
    Geändert von Liberty (08-02-2007 um 17:10 Uhr)
    Friedliebender Soldat im ganz persönlichen Auslandseinsatz

  10. #10
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Der getOutputStream() ist, wie Name und Typ schon sagen, ein OutputStream, da kann man also etwas reinschreiben.

    D.h. das geht an den Standardinput des Programms.

    Du willst die Standardausgabe des Programms lesen, also brauchst du den entsprechenden InputStream

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  11. #11
    MW10
    Gast
    @Liberty
    naja, aber genau das ist der nächste Schritt der in dem Programm kommen soll

    Bin grade noch am basteln/suchen. Soll angeblich mit "InputStreamReader"
    funktionieren.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •