# Parameterübergabe bei Runtime.getRuntime().exec



## Guest (16. Feb 2006)

Hallo,

ich habe eine relativ simples Problem.
Ich möchte ein externes Programm mit jeder Menge Parameter aufrufen.
Meine Anzeige bestätigt auch, dass das Programm ausgeführt wurde, allerdings wurde es ohne die angegebenen Parameter gestartet. *Wie starte ich das Programm mit übergebenen Parametern?* Als einfacher String wie im Beispiel scheint es nicht zu klappen, obwohl ich es in anderen Beispielen auch so gesehen hab. Was mach ich falsch?




```
String cmd=".\\bin\\sapinfo.exe ashost="+SysServer[i]+" sysnr="+SystemNo[i]+" >nul & if errorlevel 1 (echo not_active) ELSE ( echo active)";
System.out.println("Auszuführendes Kommando: " +cmd);
InputStreamReader In = new InputStreamReader(Runtime.getRuntime().exec(cmd).getInputStream());
BufferedReader br = new BufferedReader(In); 

String strLine =  ""; 
while ((strLine=br.readLine())!= null) 
    System.out.println("Line: "+strLine); 
br.close();
```
[/code]


----------



## norman (16. Feb 2006)

muss man da nicht noch "/C" schreiben, wenn man was über die konsole ausführen will?


----------



## Gast (16. Feb 2006)

Hmm. Was bedeutet das "/C"?
Ich hab es jetzt mal so probiert:


```
String cmd=".\\bin\\sapinfo.exe /c ashost="+SysServer[i]+" sysnr="+SystemNo[i]+" >nul & if errorlevel 1 (echo SYSTEM_STATUS not_active) ELSE ( echo SYSTEM_STATUS active)";
```

Es hat aber auch nicht funktioniert.
Muss das "/C" vielleicht vor jedem Parameter stehen?


----------



## norman (16. Feb 2006)

Gast hat gesagt.:
			
		

> Muss das "/C" vielleicht vor jedem Parameter stehen?


das glaube ich nicht. "/c" ist ja selbst ein parameter.


----------



## thE_29 (16. Feb 2006)

String cmd = "cmd /c blaaaaaaaa param bla etc bla"


----------



## Gast (16. Feb 2006)

Prima! Danke, das funktioniert!

also so gehts:

```
String cmd = "cmd /c Datei.exe Parameter1 Parameter2 ParameterN";
```
Wobei cmd der Konsole cmd.exe entspricht. Bei DOS Programmen sollte hierbei Command.com statt cmd verwendet werden. 
Ich hoffe ich hab das richtig zusammengefaßt.


----------



## thE_29 (16. Feb 2006)

Naja, ich verwende eigentlich immer cmd.exe

Nur man muss bedenken, win 9x hat nur command!


----------



## L-ectron-X (16. Feb 2006)

Gast hat gesagt.:
			
		

> Hmm. Was bedeutet das "/C"?


Diese Option gehört zu cmd.exe. Wenn sie mit eingeschaltet wird, schließt (close) sich die Console automatisch nach Ausführung des Befehls in der Console.


----------



## T1M (17. Feb 2006)

Hi,
ich hab n ähnliches prob.
hab n prog geschrieben, das mir den rechner runterfährt, und starte das über ne .bat. jetzt hätt ichs gern, das ich im cmd n wert angeben kann, wann der rechner runtergefahren werden soll. also, das mit der verzögerung klappt bestens, aber nur wenn ich das prog aus eclipse laufen lasse. macht aber nicht wirklich sinn, jedesmal erst eclipse zu starten um das prog auszuführen.
wie kann ich jetzt über die konsole den parameter übergeben? hab das von oben mal aufgegriffen, aber es tut nix.


```
InputStreamReader reader = new InputStreamReader(System.in);
		BufferedReader input = new BufferedReader(reader);
		String text="cmd /c";
		try
		{
			text=input.readLine();
		}
...
try
		{
			sleep(Integer.parseInt(text));
		}
```

meine kleine .bat:

```
echo herrunterfahren
set path=.;C:\meine Programme\java 2 sdk1.4.2_05\bin%PATH%
C:\meine Programme\eclipse\eclipse\workspace\WinXP_Shutdown
javaw Shutdown
```


fehlermedlung bekomm ich auch: fatal exception occured.   program will exit
geb ich das von hand ins cmd ein bekomm ich die:  could not find the main class. program will exit

Dank euch.


----------



## L-ectron-X (17. Feb 2006)

T1M hat gesagt.:
			
		

> ich hab n ähnliches prob.



Ich denke nicht. Du hast ein ganz anderes.
Du kannst entweder in deiner main()-Methode die übergebenen Argumente abfragen und in deinem Programm entsprechend einsetzen, oder über einen InputStream, so wie du schon angefangen hast, den Wert auf der Java-Console im laufenden Programm eingeben lassen. Zur Eingabe wird hier eine System-Console über Runtime nicht benötigt.


----------



## T1M (17. Feb 2006)

Hey, danke für die schnelle antwort.
ich wollt aber, dass das programm mir ne cmd öffnet in der ich die verbleibenden minuten bis zum shutdown eingeben kann.
wenn es so net geht, wie dann?


----------



## L-ectron-X (17. Feb 2006)

Irgendwie sehe ich noch keinen Sinn in der ganzen Aktion...
Wenn du deinen Rechner herunterfahren möchtest, gib den Befehl doch einfach in eine Console oder in einer Batchdatei ein.
Der Befehl: shutdown -s -t 05
...fährt den Rechner nach einer Wartezeit von 5 Sekunden herunter.

Ist das ein Programm mit einem GUI? Oder warum der Umweg über Java?

Eine Batchdatei kann so aussehen:

```
rem * Shutdown.bat
@echo off
shutdown -s -t %1
```

Diese Zeilen schreibst du in eine Batchdatei und benennst sie, wie du möchtest.
Wenn du das System herunterfahren möchtest, rufst du deine Batchdatei auf und gibst z.B. in der Console ein:


			
				Benutzereingabe hat gesagt.:
			
		

> shutdown 30


...und das System wird nach 30 Sekunden heruntergefahren.


----------



## T1M (17. Feb 2006)

:lol: gar keinen sinn!
aber ich hätts halt einfach gern mit java gemacht, denn ich wüsst gern wie ich n wert von der konsole in mein prog übergeben kann. das muss doch gehen!

aso, aber thx für die .bat. maybe feil ich da noch n bissl rum. so is es noch nicht ganz das wahre. ;-)


----------



## L-ectron-X (17. Feb 2006)

```
import java.io.*;

public class XPShutdown {
  private BufferedReader reader;
  
  public XPShutdown() {
    System.out.println("Windows XP herunterfahren\n\n");
    reader = new BufferedReader(new InputStreamReader(System.in));
    System.out.print("Zeit bis zum Shutdown in Sekunden: ");
    String input = null;
    try {
      input = reader.readLine();
    }
    catch(IOException e) {
      System.out.println("Fehler beim Lesen der Eingabe!");
    }
    
    for(int i = 0, j = input.length(); i < j; i++) {
      if(!Character.isDigit(input.charAt(i))) {
        System.out.println("\nFehlerhafte Eingabe!\nEs werden nur ganze Zahlen akzeptiert!");
        System.exit(1);
      }
    }
    
    try {
      Runtime.getRuntime().exec("cmd.exe /c shutdown -s -t "+input);
    }
    catch(IOException e) {
      System.out.println("Befehl unbekannt oder nicht ausführbar!");
    }
  }
  
  public static void main(String[] args) {
    new XPShutdown();
  }
}
```


----------



## T1M (18. Feb 2006)

ja, danke erstmal!
das prog funktioniert auch, wenn ichs in eclipse laufen lasse. soweit war ich ja schon.
aber über die konsole gehts immer noch net.
"could not find main class".
hab mal ne .bat geschrieben. und das was die macht, müsste doch, auf gleichem weg, mit java möglich sein?!


```
@echo off 
 set /p zahl="Bitte verbleibende Minuten eingeben: " 
 @echo in %zahl% Minuten wird der Rechner runtergefahren! 
 set /a min=(%zahl%*60) 
 shutdown -s -t %min%
```

naja, wenn nich, is auch egal.
Aber danke!
   T1M


----------



## L-ectron-X (18. Feb 2006)

Hallo!? Das Programm IST auch auf der Console lauffähig. Du machst etwas falsch, willst aber nicht daran arbeiten, den Fehler zu finden. Stattdessen suchst du ständig neue Lösungen. Das von mir gepostete Programm ist voll funktiontüchtig.

Wie hast du denn versucht, das Programm zu starten?


----------



## T1M (18. Feb 2006)

AAAAHHHHHHH!!!! ich bin n depp!
sry, ich war heut morgen noch nich ganz klar im kopp! es funzt bestens!!! Danke!


----------

