У меня есть .jar файл, который держит в ожидании ввода пользователя, процесса и распечатки результатов (в несколько строк), как этотВ Java BufferedReader Readline блоки на интерактивной оболочки
>Input sentence 1
Result 1
Result 2
>Input sentence 2
Result 1
Result 2
Result 3
>
Единственный способ выйти из этого банку программа нажатием Ctrl + C.
Теперь я хочу вызвать этот файл jar из моей java-программы. Мой код выглядит следующим образом:
processBuilder = new ProcessBuilder(PATH_TO_BIN);
Process process = processBuilder.start();
writer = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
writer.write(inputSentence);
writer.newLine();
writer.flush();
String line;
while ((line = reader.readLine()) != null){ //<<<< it hangs here
System.out.println(line);
}
Моя программа может успешно распечатать результат, возвращаемый программой «баночки», но держать висит на следующей reader.readLine()
и я не могу предоставить следующий вход в программу «банку».
Есть ли способ исправить эту проблему?
Заранее благодарен!
Вы не пишете ничего на банку в вашем 'while' цикла. Он ждет ввода, и вы ждете его выхода. Добавьте некоторую 'запись' после' System.out.println – AhmadWabbi
@AhmadWabbi, может быть, я не очень четко сказал в своем вопросе, но файл JAR может давать несколько строк результатов, а не только одну строку, поэтому мне нужно читать все строки результата, используя цикл while, как вы можете видеть –
В вашем примере это было даже не ясно. В этом случае невозможно провести различие между вашей программой, ожидающей следующего результата, и ждать навсегда, потому что банка закончила выдавать результаты и ждет Ctrl- C. Даже «peek» не будет различать. Я не вижу решения, кроме отправки Ctrl-C, используя поток после достаточного таймаута. – AhmadWabbi