2016-03-11 39 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()」重定向輸出流,導致問題。 謝謝!

相關問題