Archiv verlassen und diese Seite im Standarddesign anzeigen : 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!
Geht glaub ich... Musst mal nach robots suchen.
MfG Bischi
Waxolunist
23-01-2007, 12:16
Du suchst nach java.lang.Runtime.
Robots sind eher für Befehle dazu da, die sagen wir jetzt einen Mausklick oder einen Tastendruck simulieren.
@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?
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:
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.
Jo es klappt :) , danke für die Hilfe.
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
Waxolunist
08-02-2007, 15:05
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
Moin,
schon probiert, aber das hat ja eben bei mir nicht funktioniert...
Ich hab die folgende Konstruktion versucht:
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.
anda_skoa
08-02-2007, 17:52
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,
_
@Liberty
naja, aber genau das ist der nächste Schritt der in dem Programm kommen soll :rolleyes:
Bin grade noch am basteln/suchen. Soll angeblich mit "InputStreamReader"
funktionieren.
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.