2016-03-11 6 views
0

Я пробовал много разных вариантов, но ничего не работает. Я не могу заставить свой код выводить строку в «консоль» процесса. Вот мой код:Буферный вход для входа 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); 
     } 
    } 

«р» это процесс, который я пытаюсь представить вклад и «отформатирован» представляет собой массив данных. Когда вы запускаете это, ничего не происходит. Я попытался смыть/закрыть автора, но я не могу получить его в месте, не получая «java IO Exception: Stream Closed». Кто-нибудь может сказать, что случилось с моим кодом?

StackTrace:

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

Я приложил stacktrace от того, когда он сработает с writer.close(). Клиент - это всего лишь источник данных для Formatted, возможно, я мог удалить его из фрагмента. – user3149832

+0

Этот 'ProcessBuilder $ NullOutputStream' говорит. Измените свой вопрос и покажите код, который создает ProcessBuilder. Из документации ProcessBuilder: «источник * стандартного ввода». По умолчанию подпроцесс считывает входные данные из канала. Java-код может получить доступ к этому каналу через выходной поток, возвращаемый 'Process.getOutputStream()'. Тем не менее, стандартный ввод может быть перенаправлен на другой источник с помощью 'redirectInput'. В этом случае 'Process.getOutputStream()' будет возвращать выходной поток * null *, для которого: методы write всегда вызывают IOException; метод close ничего не делает ». – VGR

ответ

0

Так что я нашел эту проблему, благодаря VGR (спасибо!). «.inheritIO()» перенаправлял выходной поток, вызывая проблему. Спасибо!

 Смежные вопросы

  • Нет связанных вопросов^_^