basti92
Goto Top

Fehlermeldung bei Befehlen eines Buttons in Verbindung mit cmd.exe

Hallo Leute,
hab ein Problem mit nem Java-Code.
Fall: Ich will ein kleines Fensterprogramm mit Buttons (Grundcode vorhanden und läuft), nur wenn ich den Buttons den Befehl gebe eine cmd.exe zu öffnen, einen Befehl auszuführen und eine Ausgabe in dem Fenster (Textfeld im Fenster) zu machen, zeigt er einen Fehler, der ohne die Buttonzuweisung nicht kommt.

public static void main(String args) throws Exception{
ProcessBuilder processBuilder = new ProcessBuilder("cmd.exe", "/c", "ipconfig", "/all");
Process process = processBuilder.start();

Scanner scanner = new Scanner(process.getInputStream());
while(scanner.hasNextLine()){
System.out.println(scanner.nextLine());
}

scanner.close();
System.out.println(process.waitFor());

}

Also der Code greift zu auf cmd.exe und führt den Befehl "ipconfig /all" aus.
Diesen Code möchte einen Button zuweisen, also das wenn ich auf den Button klicke das er das macht.

ip.addActionListener(new ActionListener() {

@override
public void actionPerformed(ActionEvent arg0) {

ProcessBuilder processBuilder = new ProcessBuilder("cmd.exe", "/c", "ipconfig", "/all");
Process process = processBuilder.start();
Scanner scanner = new Scanner(process.getInputStream());
while(scanner.hasNextLine()){
lm.addElement(scanner.nextLine());

}
scanner.close();
}});

Das einzigste wo er einen Fehler hat ist bei processBuilder.start() des untergringelt er und sagt:

Unhandled exception type IOException.

Könnt ihr mir sagen warum der den Fehler schmeißt bzw. wie ich den rausbekomm sodass es läuft? Wenn ihr den gesamten Code braucht bitte melden.

Vielen dank im Vorraus

Gruß

Basti

Content-Key: 134663

Url: https://administrator.de/contentid/134663

Printed on: April 25, 2024 at 15:04 o'clock

Mitglied: 76109
76109 Jan 29, 2010 at 09:27:35 (UTC)
Goto Top
Hallo basti92!

Java gehört nicht zu meinem Fachgebiet, aber die CmdLine sollte sicherlich nur aus einem String bestehen:
...ProcessBuilder("cmd.exe /c ipconfig /all");

Gruß Dieter
Member: basti92
basti92 Jan 29, 2010 at 09:34:50 (UTC)
Goto Top
Hallo Dieter,

hab ich mir auch gedacht, habe einen Kollegen von mir gefragt und der hat gemeint das man das öfters so macht um Leerzeichen (wegen Befehlen) und wegen Leerzeichen(im Namen) unterscheiden kann.

Danke für deine Antwort. Aber es funktionier auch ohne den Einzelteilen nicht.
Member: Biber
Biber Jan 29, 2010 at 09:41:54 (UTC)
Goto Top
Moin basti92, moin didi1954,

Zitat von @76109:
Java gehört nicht zu meinem Fachgebiet, aber die CmdLine sollte sicherlich nur aus einem String bestehen:
...ProcessBuilder("cmd.exe ipconfig /all");

Nein, das würde schon passen, weil ProcessBuilder zwei mögliche Constructors hat; einen für eine "Aufrufstring", einen für eine "Aufruf-Liste von Argumenten".

// ist also so definiert:
public ProcessBuilder(List command)
public ProcessBuilder(String... command)

Ich würde allerdings bei einem "IPConfig /all"-Aufruf auch die String-Constructor-Variante nehmen.*gg

Eine IOException sollte eigentlich nur geworfen werden, wenn
  • die Rechte fehlen
  • "richtige" IO-Probleme auftreten (Sektor verstrahlt)
  • oder die Umgebung bzw. die aufzurufende Datei nicht gefinden wird.

Ich tippe auf Letzteres.
@basti92
Warum gehst du über so viele Ästlein und Zweiglein und rufst die "ipconfig.exe" über die "cmd.exe"?? Warum nicht direkt?
Falls es irgendeinen ästhetischen Hintergrund haben sollte oder einfach mehr Kohle bringt oder so bleiben soll:
- dann mal probeweise den Pfad der CMD.exe explizit mit angeben ("C:\\Windows\\cmd.exe" oder so reicht zum Testen)

Grüße
Biber
Member: Marco123
Marco123 Jan 29, 2010 at 17:53:05 (UTC)
Goto Top
Hilft dir die Klasse "Runtime" dabei ?

Runtime rt=Runtime.getRuntime();