Hi, beim letzten Java Update auf 7 Update 21 gab es eine Änderung an der Klasse java.lang.Runtime, Methode exec(), siehe http://www.oracle.com/technetwork/ja....html#jruntime .

Mein bisheriger Aufruf war:
Code:
Runtime runtime = Runtime.getRuntime();
try{
	runtime.exec("\"D:\\irgend ein Ordner\\irgendein Programm.exe\" /argument1 bla /argument2");
} catch(IOException e){
	e.printStackTrace();
}
Allerdings wirft dieser Code mit der Version 7 Update 21 folgende Exception:
Code:
Exception in thread "main" java.lang.IllegalArgumentException: Executable name has embedded quote, split the argument
Ohne die Anführungszeichen funktioniert das nicht, denn da wird der Pfad nicht gefunden, weil er dann
Code:
D:\\irgend
und den Rest als Argumente aufrufen will. Die Leerzeichen einfach zu escapen geht auch nicht.

Laut dem Changelog soll man über Runtime.exec sein Programmname und Argumente über ein Array übergeben.
Folglich kann ich über
Code:
runtime.exec(new String[]{"D:\\irgend ein Ordner\\irgendein Programm.exe", "/argument1", "bla", "/argument2"});
das Programm mit den Argumenten aufrufen. Allerdings muss wirklich jedes Argument in ein neues Element des Arrays, denn alle Argumente in ein Element zu packen funktioniert nicht.

Der nun elegantere Weg ist es den ProcessBuilder zu nutzen, da man den Konstruktor sein Programmname und Argumente als "String..."-VarArgs übergeben kann.
Code:
ProcessBuilder pb = new ProcessBuilder("D:\\irgend ein Ordner\\irgendein Programm.exe", "/argument1", "bla", "/argument2");
try{
	pb.start();
} catch(IOException e){
	e.printStackTrace();
}
Ich frag mich was für DAUs die Entwickler von Java sind, dass sie solch eine Änderung in eine Sicherheits-Update rein machen, statt wie zu erwarten das erst mit dem Release von Java 8.

PS: Funktionen mit VarArgs eines Typs kann man auch ein Array des gleichen Typs übergeben.

PPS: Wenn's nicht in den Thread passt, dann bitte ein eigenen Thread daraus machen.