Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Runtime.getRuntime().exec挂起_Java_Runtime.exec - Fatal编程技术网

Java Runtime.getRuntime().exec挂起

Java Runtime.getRuntime().exec挂起,java,runtime.exec,Java,Runtime.exec,我有一个java jar文件,inturn调用java程序(命令) 当我在commandpromt中运行生成的命令时,它工作正常 Process proc = Runtime.getRuntime().exec("cmd.exe /C "+ Command); BufferedReader stdIn = new BufferedReader(new InputStreamReader(process.getInputStream()

我有一个java jar文件,inturn调用java程序(命令)

当我在commandpromt中运行生成的命令时,它工作正常

Process proc = Runtime.getRuntime().exec("cmd.exe /C "+ Command);

        BufferedReader stdIn = new BufferedReader(new 
                     InputStreamReader(process.getInputStream()));

                BufferedReader stdErr = new BufferedReader(new 
                     InputStreamReader(process.getErrorStream()));

            String output=null;
            while((output=stdIn.readLine())!=null)
            {
                System.out.println("output is:"+output);
                out.write(output);
                out.newLine();

            }
            while((output=stdErr.readLine())!=null)
            {
                System.out.println("error output is:"+output);
                out.write(output);
                out.newLine();

            } 
            try {
process.waitFor();
....
....
....
我尝试了ProcessBuilder:

ProcessBuilder proc = new ProcessBuilder("cmd.exe", "/C", Command);         proc.redirectErrorStream(true);
proc.start();
但这带来了如下错误:

java.io.IOException: Cannot run program "java -Xmx1024M ......"
CreateProcess error=2, The system cannot find the file specified
我可以在promt中运行同样的命令,它运行得非常好。

 new ProcessBuilder("cmd.exe", "/C", Command);
您已经使用了构造函数的varargs重载。这意味着假定命令已解析为参数。但是,您将完整的
命令作为单个参数传递,这意味着
cmd
将把整个命令行
java-Xmx…
解释为要运行的命令(文件名)

要么坚持使用单个字符串,依靠
ProcessBuilder
类对其进行解析,要么预先解析所有内容

至于悬而未决的问题,可能有几个原因:

  • 也许你的
    out
    流被阻塞了
  • 可能是您正在启动的程序写入了stderr
,直到已经太晚了(程序已经结束),您才读取它
您的第二种方法将通过合并
stdout
stderr

谢谢Marko来解决这个问题。命令是这样的:“java-Xmx1024M-Djava.util.logging.file=“log//logs.txt”-classpath lib\tool.jar;lib\solver.jar com.tool.section.MainFunc-parameter redo section logo.propery C:\SectionTool”我不知道现在如何将其传递到ProcessBuilder中:(类似于
等等。谢谢Marko.:(啊..我刚才看到了一个代码流,看到我们需要跟进到现在的相同代码..意味着我们需要找到一个解决方案,使用Process proc=Runtime.getRuntime().exec(“cmd.exe/C”+命令);仅此而已。这是因为许多代码已经使用BufferedReader编写,如果我们使用ProcessBuilder,这些代码将不得不重写。我们有什么办法可以解决这个问题吗?没有理由不能将
BufferedReader
ProcessBuilder
创建的进程一起使用。一旦创建
进程
实例,你在同一个地方,就好像你用老方法创造了它一样。