2016-03-03 2 views
1

Я создаю приложение javaFx. Я запускаю команду, используя класс java process builder.Получение выходных данных из java-процесса.

ProcessBuilder builder = new ProcessBuilder(runCommand); 

         builder.redirectErrorStream(true); 
Process process = builder.start(); 
try { 
          process.waitFor(); 

         } catch (InterruptedException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } 

Я пытаюсь получить выход из процесса я попытался два разных способа, но я не могу получить его.

InputStream stdout = process.getInputStream(); 
          InputStream stderr = process.getErrorStream(); 
          BufferedReader reader = new BufferedReader (new InputStreamReader(stdout)); 
          String line1=null; 
          while ((line1 = reader.readLine()) != null) { 
           System.out.println(line1); 
           } 
          BufferedReader errorred = new BufferedReader (new InputStreamReader(stderr)); 
          while ((line1 = errorred.readLine()) != null) { 
           System.out.println(line1); 
           } 

Я попробовал это также.

ProcessBuilder builder = new ProcessBuilder(runCommand); 
         //String outputLogs = new VerboseProcess(new ProcessBuilder("")); 
         builder.redirectErrorStream(true); 
         builder.redirectOutput(Redirect.INHERIT); 
         builder.redirectError(Redirect.INHERIT); 
         builder.redirectInput(Redirect.INHERIT); 
         Process process = builder.start(); 

         try { 
          process.waitFor(); 

         } catch (InterruptedException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } 
+0

Не могли бы вы попробовать фрагмент из моего ответа и проверить результат на вашем компьютере. – SubOptimal

ответ

1

Я считаю, что ошибка находится где-то в другом месте. Следующий фрагмент код основан на Опубликованный коде

ProcessBuilder builder = new ProcessBuilder("java.exe", "-version"); 
builder.redirectErrorStream(true); 
Process process = builder.start(); 
process.waitFor(); 
int exitValue = process.exitValue(); 
System.out.println("exitValue = " + exitValue); 

InputStream stdout = process.getInputStream(); 
InputStream stderr = process.getErrorStream(); 
BufferedReader reader = new BufferedReader(new InputStreamReader(stdout)); 
String line1 = null; 
while ((line1 = reader.readLine()) != null) { 
    System.out.println(line1); 
} 
BufferedReader errorred = new BufferedReader(new InputStreamReader(stderr)); 
while ((line1 = errorred.readLine()) != null) { 
    System.out.println(line1); 
} 

и производит следующий вывод на консоли

exitValue = 0 
java version "1.8.0_74" 
Java(TM) SE Runtime Environment (build 1.8.0_74-b02) 
Java HotSpot(TM) 64-Bit Server VM (build 25.74-b02, mixed mode) 

Если команда, указанная в new ProcessBuilder(command...) не существует или нет в PATH IOException выброшен

Cannot run program "...": CreateProcess error=2, The system \ 
    cannot find the file specified 

Если у вас нет выхода. После может быть причиной:

  • процесс не печатается ничего на стандартный вывод/STDERR
  • ваш runcommand начать процесс в фоновом режиме, например, на Linux/OSX command & или на Windows start command.exe
+0

Это дает результат для меня, но если я заменил новый ProcessBuilder («java.exe», «-version»); с новым ProcessBuilder (runcommand); и запустить его ничего не дает. Поэтому я должен что-то изменить в аргументе ProcessBuilder, чтобы вернуть результат. Даже если есть какая-то проблема с командой, не следует ли давать сообщение об ошибке? – user3649361

+0

@ user3649361 Я обновил свой ответ. Добавьте часть с 'exitCode', чтобы увидеть, какой код выхода запускается вашим процессом. – SubOptimal

+0

Я не получаю никакого вывода, кажется, что процесс начинается в фоновом режиме, как это разрешить? – user3649361

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