2011-05-17 31 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