2012-07-26 60 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 
    } 

當我嘗試獲取inputstream並運行該代碼塊進入無限循環時。 然後我改變了上面的代碼。但是,當我運行它獲得1的退出值,並不能關閉系統。Java ProcessBuilder關閉系統錯誤

任何想法?

PS:我不想使用java運行時。

回答

0

命令應該是:

String command ="shutdown.exe -s"; 

代替:

String command ="shutdown -s"; 
+0

我只是直接在cmd中做了一些測試......它似乎在雙引號內分隔參數。即'cmd> cmd/C「foo.exe arg1 arg2」'被解釋爲'cmd> cmd/C「foo.exe」「arg1」「arg2」'和'cmd> cmd/C「foo.exe」arg1 arg2 「'''相當於'cmd> cmd/C foo.exe」arg1 arg2「'巫婆是一種奇怪的行爲,因爲如果想要將'arg1 agr2'解釋爲包含空格字符的單個參數,他會直觀地寫'cmd > cmd/C「foo.exe \」arg1 arg2 \「」' – A4L 2012-07-27 20:42:03

1

嘗試:

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

的構造函數的ProcessBuilder(字符串...命令)的參數(一個或多個)命令傳遞各爲1個參數的可執行文件,這允許有爭論的空間。

您正在執行的命令的方式相當於

cmd /C "shutdown -s"

從而「關機-s」被解釋爲一個參數。

+0

我的其他作品的命令,即使我不單獨通過他們的論點? – kamaci 2012-07-27 05:48:37