2011-05-17 28 views
2

我想讓Java執行另一個程序,並且它立即以退出碼128錯誤輸出,並且沒有任何內容發送到stdout或stderr。我嘗試了一個簡單的「java -version」,但沒有運氣。當我在CMD窗口中運行它,它運行良好,這代碼工作在同樣配置其他機器(在Windows Server 2003 x64上,Java 1.6的更新25)無法在Java中啓動任何進程(ProcessBuilder進程立即返回,退出代碼爲128)

當在命令行中運行:

C:\Documents and Settings\zugwalt>java -version 

輸出:

java version "1.6.0_25" Java(TM) SE 
Runtime Environment (build1.6.0_25-b06) 
Java HotSpot(TM) 64-Bit Server VM (build 20.0-b11, mixed mode) 

那我試試這個代碼:

try { 
      List<String> cmd = new LinkedList<String>(); 
      cmd.add("java"); 
      cmd.add("-version"); 
      ProcessBuilder apb = new ProcessBuilder(cmd); 
      apb.redirectErrorStream(true); 
      System.out.println("STARTING w00t!"); 
      Process p = apb.start(); 

      BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream())); 
      String line = null; 
      while ((line = input.readLine()) != null) { 
        System.out.println("OUTPUT: "+line); 
      } 
      System.out.println("EXIT: "+p.exitValue()); 
      System.out.println("WAIT FOR: "+p.waitFor()); 
     } catch (Exception ex) { 
      System.out.println("CAUGHT: "+ex.getMessage()); 
      ex.printStackTrace(); 
     } 

輸出是:

STARTING w00t! 
EXIT: 128 
WAIT FOR: 128 
+1

有關發佈到ServerFault的特定體系結構/環境的更多詳細信息(和重點):http://serverfault.com/questions/270657/java-subprocess-running-from-iis6-returns-exit-value-128-and -no-stdout-stderr – 2011-05-17 21:39:17

+0

「出錯」 我喜歡那樣。 – Sid 2011-05-17 21:50:37

+0

即使底層操作系統進程(java.exe)似乎沒有成功啓動,它仍然非常有趣(令人沮喪),即進程對象(p)不爲空,並且不會引發異常。 – 2011-05-17 22:00:54

回答

0

你應該p.exitValue()之前調用p.waitFor()

+0

在沒有p.exitValue()的情況下調用p.waitFor()也會產生128. – 2011-05-17 21:53:07

+0

我實際上並沒有調用p.exitValue()並且有同樣的問題。我只是在p.exitValue()中添加了一些額外的上下文(程序甚至沒有啓動) – Zugwalt 2011-05-17 22:29:11