getRuntime (). exec (команда) зависла - PullRequest
0 голосов
/ 29 мая 2019

Я выполняю команду, которая ничего не возвращает, вместо этого она создает zip-файл в каталоге. Всякий раз, когда возникают проблемы с выполнением команды, приложение переходит в состояние зависания. Я видел много информации о том, что я должен также удалить свой ErrorStream, но ни один из кодов, которые я уже видел в StackOverflow, не смог помочь мне в моем случае использования. Пожалуйста, обратите внимание на мой код ниже.

В коде я запускаю команду, а затем Java-приложение вводит идентификатор и пароль в необходимые поля, а затем начинается программа.

try {
    process = Runtime.getRuntime().exec(SomeCommand);
    try (Writer writer = new OutputStreamWriter(process.getOutputStream());
         Reader reader = new InputStreamReader(process.getInputStream()) ) {

        CharBuffer buf = CharBuffer.allocate(80);
        int tries = 2;

        while (process.isAlive()) {

            while (reader.ready() && reader.read(buf) > 0) {
                System.out.println(buf.flip());
                buf.clear(); 
            }
            tries--;

            if (tries == 0) {
                writer.write(p);
                writer.flush();
            }

            if (tries == 1) {
                writer.write(h);
                writer.flush();
            }

            while (!reader.ready()) {
                Thread.sleep(1000);
                if (!process.isAlive ()) {
                    // Code to update UI to reflect progress
                    process.destroy();
                    break;
                }
            }
        }
    }
} catch (Exception e) {
    SubmitController.logger.warningMessage("Error>>> CommandController");
    progressIndicator.isVisible();
}
...