2012-07-26 6 views
0
ProcessBuilder pb; 
Process process; 
String command ="shutdown -s"; 
    try { 
     pb = new ProcessBuilder("cmd.exe", "/C", command) 
     process = pb.start(); 
     process.waitFor(); 
     if (process.exitValue() == 0) {     
      //success 
     } else { 
      //handle error 
     } 
    } catch (Exception e) { 
     //handle error 
    } 

Lorsque j'essaie d'obtenir inputtream et d'exécuter ce bloc de code système va dans une boucle infinie. Puis j'ai changé le code comme vu ci-dessus. Cependant quand je l'exécute il obtient la valeur de sortie de 1 et ne peut pas arrêter le système.Erreur système Java ShutBuilder Shutdown

Des idées?

PS: Je ne veux pas utiliser le temps d'exécution Java.

Répondre

0
commande

doit être:

String command ="shutdown.exe -s"; 

au lieu de:

String command ="shutdown -s"; 
+0

Je viens de faire quelques tests directement dans cmd ... il semble diviser les arguments entre guillemets. ie 'cmd> cmd/C" foo.exe arg1 arg2 "' est interprété comme 'cmd> cmd/C" foo.exe "" arg1 "" arg2 "' et 'cmd> cmd/C" foo.exe "arg1 arg2 "" 'est équivalent à' cmd> cmd/C foo.exe "arg1 arg2" 'witch est un comportement étrange puisque si on voulait avoir' arg1 agr2' interprété comme un seul argument contenant un espace, il écrirait intuitivement 'cmd > cmd/C "foo.exe" arg1 arg2 \ "" ' – A4L

1

Essayer:

pb = new ProcessBuilder("cmd.exe", "/C", "shutown", "-s"); 

la commande pour le constructeur ProcessBuilder (chaîne de commande ...) argument (s) sont transmis chacun tels que 1 argument à l'exécutable, ce qui permet d'avoir des espaces dans l'argument.

la façon dont vous exécutez la commande est équivalente à

cmd /C "shutdown -s"

ainsi « arrêt -s » est interprété comme un seul argument.

+0

mes autres commandes fonctionne même je ne passent pas leurs arguments séparément? – kamaci