Код: Выделить всё
ProcessBuilder API. Мне удалось запустить пример, и теперь я дошел до того момента, когда мне нужно получить из него данные. Он возвращает данные через стандартный вывод
Мои классы:
- : запускает процесс и устанавливает переменную входного потока
Код: Выделить всё
Transcriber< /code>: класс для управления фактическим процессом транскрибирования < /p> Transcriber.start()
- : возвращает inputstream процесса
Код: Выделить всё
Transcriber.getInputStream()
Код: Выделить всё
Checker
Код: Выделить всё
public Checker(Transcriber transcriber) {
InputStream inputStream = transcriber.getInputStream();
reader = new BufferedReader(new InputStreamReader(inputStream));
}
Код: Выделить всё
Runnable checkText< /code>: запускается каждые 5 секунд, чтобы проверить текст private final Runnable checkText = new Runnable() { @Override public void run() { String lastLine = ""; try { // Get the last/most recent line of the output String currentLine; while ((currentLine = reader.readLine()) != null) { // Issue is here!!! lastLine = currentLine; } } catch (IOException | NullPointerException e) { throw new RuntimeException(e); } System.out.println("You said: " + lastLine); Matcher matcher = pattern.matcher(lastLine); // Use Regex to search the output if (matcher.find()) { System.out.println("You said \"test\""); } else { System.out.println("You did not say \"test\""); } } };
Все работает отлично, кроме получения последняя строка. Программа застревает в бесконечном цикле проверки самой последней/последней строки вывода программы. Он просто продолжает читать и никогда не достигает конца BufferedReader.
Вопрос
- Есть ли лучший способ прочитать последнюю строку?
- Почему readLine() никогда не == null?
- Что я такое делаете что-то не так?
Подробнее здесь: https://stackoverflow.com/questions/793 ... nputstream