Infinite Loop, пытаясь прочитать последнюю строку inputstreamJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Infinite Loop, пытаясь прочитать последнюю строку inputstream

Сообщение Anonymous »

Я работаю над проектом и использую quiet.cpp для преобразования речи в текст. Я не использую привязки Java, а вместо этого компилирую примеры/поток и запускаю его с использованием процесса/

Код: Выделить всё

ProcessBuilder API. Мне удалось запустить пример, и теперь я дошел до того момента, когда мне нужно получить из него данные. Он возвращает данные через стандартный вывод
, к которому я получаю доступ через шепотProcess.getInputStream();
Мои классы:
  • Код: Выделить всё

    Transcriber< /code>: класс для управления фактическим процессом транскрибирования < /p>
    
    Transcriber.start()
    : запускает процесс и устанавливает переменную входного потока
  • Код: Выделить всё

    Transcriber.getInputStream()
    : возвращает inputstream процесса
[*] : проверяет входной поток на наличие определенного слова.

Код: Выделить всё

  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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Бесконечный цикл при попытке прочитать последнюю строку InputStream
    Anonymous » » в форуме JAVA
    0 Ответы
    33 Просмотры
    Последнее сообщение Anonymous
  • Android Studio "Найти использование" Infinite Loop
    Anonymous » » в форуме Android
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Android Studio "Найти использование" Infinite Loop
    Anonymous » » в форуме Android
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Как запустить несколько параллельных экземпляров питона Infinite Loop Bot с разными аргументами одновременно?
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Как запустить несколько параллельных экземпляров питона Infinite Loop Bot с разными аргументами одновременно?
    Anonymous » » в форуме Python
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»