2015-10-07 2 views
1

У меня есть код, который работает и успешно выводит вывод, если я выполняю что-то вроде «dir», но не выводя результат, если я запускаю «java -version» или другую команду из Ява. Пожалуйста, помогите:ProcessBuilder не отображает выходной поток, если он java

public static void execJob(){ 

    try{   

    ProcessBuilder pb = new ProcessBuilder("C:\\myPrograms\\jdk1.7.0_79\\bin\\java.exe", "-version"); 
    pb.directory(new File("src")); 
    Process process = pb.start(); 
    IOThreadHandler outputHandler = new IOThreadHandler(process.getInputStream()); 
    outputHandler.start(); 
    process.waitFor(); 

    System.out.println(outputHandler.getOutput()); 
    }catch(Exception e) { 
     System.out.println(e.toString()); 
    } 

} 

private static class IOThreadHandler extends Thread { 
    private InputStream inputStream; 
    private StringBuilder output = new StringBuilder(); 

    IOThreadHandler(InputStream inputStream) { 
     this.inputStream = inputStream; 
    } 

    public void run() { 
     Scanner br = null; 
     try { 
      br = new Scanner(new InputStreamReader(inputStream)); 
      String line = null; 
      while (br.hasNextLine()) { 
       line = br.nextLine(); 
       output.append(line + System.getProperty("line.separator")); 
      } 
     } finally { 
      br.close(); 
     } 
    } 
+1

Сначала делают e.printStacktrace вместо e.toString –

+1

Try [ 'ProcessBuilder.inheritIO()'] (https://docs.oracle.com/javase/7/docs/api/java/lang/ ProcessBuilder.html # inheritIO% 28% 29), убедитесь, что он пишет в stdout, а не stderr. –

+0

Спасибо Elliott, но inheritIO() не помогло. Любые другие предложения .. – Affi

ответ

2

java -version пишет STDERR, так что вам нужно pb.redirectErrorStream(true); захватить выход.

ProcessBuilder pb = new ProcessBuilder("C:\\myPrograms\\jdk1.7.0_79\\bin\\java.exe", "-version"); 
pb.redirectErrorStream(true); 
... 
+0

Да, вы правы, сейчас написано. На самом деле я пытаюсь запустить java-программы из командной строки и отобразить вывод в реальном времени, и он не отображает вывод, который очень важен. почему вызов некоторых jar и отображение вывода не работает, даже если теперь работает java-версия. Любая идея – Affi

+0

@Affi не знаю почему. Возможно, это будет ваш следующий вопрос ... – wero

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

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