Получить результат Matlab в Java
Я использую Matlab в своем проекте, и я хочу получить результат Matlab в Java. Просто хочу результата. Я хочу получить результат файла, который я делаю в Matlab в Java. Я использую этот код, но он дает мне результат в Matlab Windo, и я хочу только получить результат только в Java. это код
public class matlab {
private static File myMATLABScript;
//private static File myMATLABScript;
public static String runScript(File scriptName) {
String output = "" ;
String error = "";
try {
//String commandToRun = "matlab -r myMATLABScript -nodisplay < " + scriptName;
String commandToRun = "matlab -nosplash -r myMATLABScript -nodisplay -nodesktop < " + scriptName;
System.out.println(commandToRun);
Process p = Runtime.getRuntime().exec(commandToRun);
String s;
BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
// read the output from the command
System.out.println("\nHere is the standard output of the command:\n");
while ((s = stdInput.readLine()) != null) {
output = s + "\n";
System.out.println(s);
//System.out.println("what is the problem");
}
// read any errors from the attempted command
//System.out.println("\nHere is the standard error of the command (if any):\n);
while ((s = stdError.readLine()) != null) {
error = s + "\n";
System.out.println(s);
}
} catch (Exception e) {
System.out.println("exception happened - here’s what I know: ");
e.printStackTrace();
System.exit(-1);
}
return output + error;
}
public static void main(String[] args) throws IOException{
matlab m = new matlab();
matlab.runScript(myMATLABScript);
}
}
не могли бы вы мне помочь?
4 ответа
На какой ОС вы работаете? Приложение Matlab ведет себя по-разному в разных ОС. Я предполагаю, что вы работаете в Windows, потому что упоминаете "Окно Matlab", даже если вы передаете "-nodesktop". В Windows Matlab по своей сути является приложением с графическим интерфейсом, а stdin / stdout бесполезны.
Попробуйте изменить свой сценарий, чтобы записать его вывод в файл, определяемый переменной среды, аргументом функции, передаваемым в mymatlabscript, или известным путем. Затем прочитайте этот файл вместо стандартного вывода Matlab. Используйте только ключ "-r", а не "<". Это будет переносимым на все операционные системы, и вам может быть легче разобрать, потому что выходной файл не будет иметь дополнительного вывода командного окна Matlab.
Вам также может понадобиться использовать ключ "-wait" для блокировки, пока ваш скрипт Matlab не будет завершен. Обычный вызов Matlab.exe в Windows вернется немедленно. Удостоверьтесь, что ваш скрипт заканчивается на "exit()", иначе Matlab будет работать бесконечно, ожидая ввода данных пользователем после его завершения.
Попробуйте запустить Matlab Engine вместо создания нового процесса Matlab ( вот другое описание).
matlabcontrol - это Java API, который позволяет вам делать это. API можно использовать так, как если бы вы взаимодействовали с командным окном MATLAB, и вы можете получать результаты в виде объектов Java. Нет необходимости записывать или читать потоки ввода / вывода / ошибок или внешние файлы. Для запуска вашего скрипта у вас будет MATLAB cd
в каталог, в котором находится ваш скрипт, а затем либо eval
или же feval
сценарий. Чтобы начать, взгляните на прохождение.
У вас случайно есть лицензия на MATLAB Builder JA, и теперь вы ее знаете?
http://www.mathworks.com/products/javabuilder/
Это был бы простой способ получить доступ к результатам вашей функции MATLAB в Java.