Java ProcessBuilder:流关闭

时间:2015-10-31 20:18:59

标签: java processbuilder

我正在尝试使用ProcessBuilder加载二进制文件,使其保持加载状态,然后偶尔将数据放入并解析输出。

我现在拥有的一个例外是说流已关闭。

我是否对Process如何在Java中工作有误解?我尝试在这里运行的二进制文件接受来自stdin的输入并将结果打印到stdout。它应该工作。如果我通过输入手动输入二进制文件,并且输入行为是预期的,但我想知道为什么在Java中调用时这不起作用。

我的代码如下所示:

public class Run {

    public static void main(String [] args) throws IOException, InterruptedException{
        List<String> cmd = new ArrayList<String>();
        cmd.add("/path/to/binary");
        cmd.add("/path/to/param.par");
        Process process=null;
        try {
            process = new ProcessBuilder().inheritIO().command(cmd).start();
        } catch (IOException e) {
            e.printStackTrace();
        }  
        BufferedWriter writer  = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
        BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));

        try {
            writer.write("Hi\\nhow\\nare\\you\\n?\\n\\n");
            writer.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
        String l=null;
        while((l=reader.readLine())!=null){
            System.out.println(l);
        }
    }
}
  

我得到的例外是:读取参数   file ... java.io.IOException:Stream关闭了   java.lang.ProcessBuilder中的$ NullOutputStream.write(ProcessBuilder.java:433)     在java.io.OutputStream.write(OutputStream.java:116)at   sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)at at   sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291)at at   sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:295)at   sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:141)at   java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229)at   java.io.BufferedWriter.flush(BufferedWriter.java:254)at   hack.Run.main(Run.java:28)完成0

0 个答案:

没有答案