#java #process
#java #процесс
Вопрос:
Я использую Runtime.getRuntime().exec(test.class ) для создания процесса и запуска test.class файл.
test.class:
public class test {
public static void main(String[] args) {
doReturn();
}
public static String doReturn() {
System.out.println("printed output");
return "returned output";
}
}
в приложении Java, запускающем этот процесс, я хотел бы получить выходные данные этого test.class
Код, который я использую, выглядит следующим образом:
Process proc = null;
String[] cmd = { "java", "test"};
proc = Runtime.getRuntime().exec(cmd);
InputStream inputStream = proc.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String line;
while ((line = bufferedReader.readLine()) != null)
{
System.out.println(line);
}
Этот фрагмент кода не работает: ничего не печатается, и я получаю значение Exit, равное 1 для моего процесса.
=> Как я должен его модифицировать (и / или модифицировать test.class ) чтобы вернуть «печатный вывод» в мое Java-приложение? => Возможно ли также вернуть «возвращенный вывод»?
(Я новичок в Java, поэтому не могли бы вы, пожалуйста, быть очень подробными в своих ответах! Спасибо!)
Ответ №1:
Я не знаю, что вы хотите сделать, но попробуйте удалить .class
String[] cmd = { "java", "test"};
Комментарии:
1. 😉 С другой стороны, будьте осторожны с путем процесса. Попробуйте указать абсолютный путь к java.
2. вы были правы! Черт… это была ошибка в пути к test.class
Ответ №2:
Попробуйте библиотеку commons exec. Это упрощает большую часть кода, который в противном случае вам пришлось бы написать. Вам нужно будет захватить входной поток из процесса в другом потоке. При выполнении этого в том же потоке возникают проблемы.. Некоторая информация здесь:
http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html
И библиотека commons exec здесь:http://commons.apache.org/exec /