чтение выходных данных из класса, выполняемого как процесс

#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 /