внешняя программа из Java не заканчивается - PullRequest
0 голосов
/ 15 сентября 2011

Когда я пытаюсь выполнить внешнюю программу из Java, я использую следующий код:

Process p;
rn = Runtime.getRuntime();

String[] unzip = new String[2];

unzip[0]="unzip";

unzip[1]=archive ;

public void dezip() throws IOException{

    p = rn.exec(unzip);
    int ret = p.exitValue();

System.out.println("End of unzip method");

Но мой последний System.out никогда не выполняется, как если бы мы выходили из метода unzip. Вызов unzip() выполняет только половину работы, распаковывается только часть моего архива. Когда я использую ps -x или htop из командной строки, я вижу, что процесс распаковки все еще здесь.

Помогите пожалуйста.

Ответы [ 4 ]

1 голос
/ 15 сентября 2011
  1. Убедитесь, что внешняя программа не ожидает ввода пользователя
  2. Проверьте, указан ли путь к исполняемому файлу при запуске в системах Windows для обработки каталогов с пробелами или специальными символами.

PS. Я использовал класс java.lang.Runtime, но обнаружил, что класс java.lang.ProcessBuilder намного лучше. Вы можете указать текущий рабочий каталог и, самое главное, системную среду.

1 голос
/ 15 сентября 2011

Возможно, вам нужно прочитать InputStream из процесса.См. Javadoc Process

В котором говорится:

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

1 голос
/ 15 сентября 2011

Проверьте, запрашивает ли команда unzip что-то, возможно, предупреждение, если файл уже существует, и если вы хотите перезаписать его.

Кроме того, есть ли обратная цитата, которую я вижу в середине Java-программы

0 голосов
/ 15 сентября 2011

Пожалуйста, попробуйте следующее:

p = rn.exec(unzip);
p.waitFor()

Надеюсь, это что-то изменит.

...