Я пытаюсь запустить скрипт Matlab из командной строки, которую я в свою очередь вызываю из Java.Я вызываю сценарий несколько раз, используя цикл, и на каждой итерации я хочу, чтобы моя Java-программа приостанавливалась до тех пор, пока сценарий Matlab не завершится и Matlab не будет завершен.
Использование в этом примере (который работаетв качестве шаблона, я придумал следующий код (упрощенно): РЕДАКТИРОВАТЬ: добавлено потребление входного потока и потока ошибок
Runtime rt = Runtime.getRuntime();
String cmd = "matlab -r \"my_matlab_cmd(arg1, arg2); exit\"";
try {
Process proc = rt.exec(cmd);
BufferedReader stdInput = new BufferedReader(new InputStreamReader(proc.getInputStream()));
String line = null;
while((line = stdInput.readLine()) != null) {
System.out.println(line);
}
BufferedReader stdError = new BufferedReader(new InputStreamReader(proc.getErrorStream()));
StringBuilder err = new StringBuilder();
String e = null;
while ((e = stdError.readLine()) != null) {
err.append(e + "\n");
}
if (err.length() != 0) {
throw new IOException(err.toString());
}
int pwf = proc.waitFor();
System.out.println(pwf);
} catch (IOException e1) {
e1.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Matlab finished");
Однако, это не работает, как ожидалось.Java не ждет, пока Matlab сделает свое дело и закроется;вместо этого он идет прямо к последней команде распечатки.Ошибок нет, и значение pwf
равно 0, как и ожидалось.
Что мне здесь не хватает?
ОБНОВЛЕНИЕ: Я только что узнал, что если я заменю notepad.exe
на matlab.exe
в примере игрушка , он больше не будет работать - Java завершится даже перед открытием Matlab.