2016-03-11 35 views
0

我已经尝试了很多不同的选择,但似乎没有任何工作。我无法让我的代码将字符串输出到进程的“控制台”。这里是我的代码:BufferedWriter到ProcessBuilder的输入?

Process p; 
    // Create new ProcessBuilder 
    ProcessBuilder pb = new ProcessBuilder("java", "-jar", "jar-location").inheritIO(); 
    // Change work directory 
    pb.directory(new File("other-location")); 
    // Redirect output 
    pb.redirectOutput(new File("C:\\xampp\\htdocs\\log.json")); 
    // Start ProcessBuilder 
    p = pb.start(); 
    OutputStream stdin = p.getOutputStream(); 
    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stdin)); 
    while(!done) { 
     try { 
      if(go != null) { 
       writer.write(formatted[0]) 
      } 
      Thread.sleep(1000); 
     } 
     catch(Exception err) { 
      System.out.println(err); 
     } 
    } 

“p”是我试图提交输入的过程,“格式化”是一个数据数组。当你运行这个时,没有任何反应。我已经尝试刷新/关闭作者,但是我无法在没有得到“Java IO Exception:Stream Closed”的情况下获得它。任何人都可以告诉我的代码有什么问题吗?

堆栈跟踪:

Exception in thread "main" java.io.IOException: Stream closed 
    at java.lang.ProcessBuilder$NullOutputStream.write(ProcessBuilder.java:433) 
    at java.io.OutputStream.write(OutputStream.java:116) 
    at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221) 
    at sun.nio.cs.StreamEncoder.implClose(StreamEncoder.java:316) 
    at sun.nio.cs.StreamEncoder.close(StreamEncoder.java:149) 
    at java.io.OutputStreamWriter.close(OutputStreamWriter.java:233) 
    at java.io.BufferedWriter.close(BufferedWriter.java:266) 
    at com.Rocket_Scientist.Main.main(Main.java:60) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) 
+0

请发布stacktrace。另外,什么是'客户端'? –

+0

我从writer.close()崩溃时附加了stacktrace。客户端仅仅是格式化数据的来源,我可能可以将其从片段中删除。 – user3149832

+0

'ProcessBuilder $ NullOutputStream'告诉你。编辑您的问题并显示创建ProcessBuilder的代码。从ProcessBuilder的文档中:“*标准输入的来源。*默认情况下,子进程从管道读取输入。 Java代码可以通过'Process.getOutputStream()'返回的输出流来访问这个管道。但是,标准输入可能会使用'redirectInput'重定向到另一个源。在这种情况下,'Process.getOutputStream()'将返回一个* null输出流,*其中:write方法总是抛出IOException; close方法什么也不做。“ – VGR

回答

0

所以我发现这个问题,这要归功于VGR(谢谢!)。 “.inheritIO()”重定向输出流,导致问题。 谢谢!

相关问题