2013-06-03 16 views
9

Dostaję błąd:IllegalArgumentException: nazwa pliku wykonywalnego został osadzony cytat, podzielić argumenty

IllegalArgumentException : Executable name has embedded quote, 
split the arguments 

Podczas uruchamiania

Runtime.getRuntime().exec(cmd, envTokens, file1); 

używam Windows7 i maszynę Java7.

Ta sama linia kodu działa dobrze w innych środowiskach.

Zaproponuj mi sposób.

+1

Pokaż, jak wyglądają twoje parametry 'cmd',' envTokens', 'file1'. Czy zawierają cytaty? – mvp

+0

moje parametry nie zawierają cudzysłowów ... ale zawierają spacje między nimi i wcześniej podałem tę samą linię kodu, działając dobrze w innych środowiskach –

+0

możesz być w stanie to przezwyciężyć, chroniąc przestrzenie wewnątrz przez dodatkowe cudzysłowy lub ukośniki odwrotne , ale myślę, że [ta odpowiedź poniżej] (http://stackoverflow.com/a/16890476/1734130) pojawia się w celu rozwiązania twojego problemu, szczególnie jeśli używasz najnowszego JDK – mvp

Odpowiedz

13

Dzieje się tak ze względu na zmianę w Java 7 update 21/Java 6 update 45.

Rozwiązaniem problemu jest zastąpienie kodu w celu użycia java.lang.ProcessBuilder. Na przykład:

ProcessBuilder pb = new ProcessBuilder("command", "argument1", "argument2"); 
Map<String, String> env = pb.environment(); 
env.put("var1", "value1"); 
Process p = pb.start(); 
+0

, możesz sugerować mi jakiś sposób zrobienia tego z Runtime .getRuntime(). exec() tylko, jeśli to możliwe? –

+1

Domyślam się, że podział samego cmd i przekazanie tablicy do exec (zamiast łańcucha ze spacjami) nadal będzie działało. –

+0

Otrzymuję ten sam komunikat o błędzie z moim kodem źródłowym w kompilatorze BlackBerry w czasie zaćmienia. Mówi, że nie można uruchomić kompilatora. to wiadomość. Co ja robię? Gdzie patrzeć.? – ejobity