Вы можете подключить Java® engine к общему MATLAB® сеансы, выполняемые на локальном компьютере. Для подключения к общему сеансу работы с MATLAB:
Запустите MATLAB как общая сессия Engine или сделайте текущий процесс MATLAB общим с помощью matlab.engine.shareEngine.
Поиск имен сеансов совместной работы MATLAB с помощью MatlabEngine.findMatlab или MatlabEngine.findMatlabAsync статический метод.
Передайте строку, содержащую имя общего сеанса работы с MATLAB, в MatlabEngine.connectMatlab или MatlabEngine.connectMatlabAsync статический метод. Эти методы соединяют механизм Java с сеансом совместной работы.
Если вы не задаете имя общего сеанса работы с MATLAB при вызове MatlabEngine.connectMatlab или MatlabEngine.connectMatlabAsync, механизм использует первый созданный общий сеанс работы с MATLAB. Если нет доступных общих сеансов работы с MATLAB, механизм создает общий сеанс работы с MATLAB и подключается к этому сеансу.
Описание этих методов смотрите в com.mathworks.engine.MatlabEngine
Преобразуйте сеанс работы с MATLAB в сеанс совместной работы путем вызова matlab.engine.shareEngine от MATLAB.
matlab.engine.shareEngine
Найдите сеанс и подключитесь синхронно с Java.
import com.mathworks.engine.*;
public class javaFindConnect {
public static void main(String[] args) throws Exception {
String[] engines = MatlabEngine.findMatlab();
MatlabEngine eng = MatlabEngine.connectMatlab(engines[0]);
// Execute command on shared MATLAB session
eng.eval("plot(1:10); print('myPlot','-djpeg')");
eng.close();
}
}Преобразуйте сеанс работы с MATLAB в сеанс совместной работы путем вызова matlab.engine.shareEngine от MATLAB.
matlab.engine.shareEngine
Найдите сеанс и соединитесь асинхронно с Java.
import com.mathworks.engine.*;
import java.util.concurrent.Future;
public class javaFindConnectAsync {
public static void main(String[] args) throws Exception {
Future<String[]> eFuture = MatlabEngine.findMatlabAsync();
String[] engines = eFuture.get();
Future<MatlabEngine> engFuture = MatlabEngine.connectMatlabAsync(engines[0]);
// Work on other thread
MatlabEngine eng = engFuture.get();
// Execute command on shared MATLAB session
Future<Void> vFuture = eng.evalAsync("plot(1:10); print('myPlot','-djpeg')");
eng.close();
}
}Имя общего сеанса работы с MATLAB можно задать при выполнении matlab.engine.shareEngine Функция MATLAB. Это устраняет необходимость использования MatlabEngine.findMatlab или MatlabEngine.findMatlabAsync чтобы найти имя.
Например, запустите MATLAB и назовите сеанс совместной работы myMatlabEngine.
matlab -r "matlab.engine.shareEngine('myMatlabEngine')"Подключитесь к именованному сеансу работы с MATLAB с Java.
import com.mathworks.engine.*;
public class javaNameConnect {
public static void main(String[] args) throws Exception {
String[] myEngine = {"myMatlabEngine"};
MatlabEngine eng = MatlabEngine.connectMatlab(myEngine[0]);
// Execute command on shared MATLAB session
eng.eval("plot(1:10); print('myPlot','-djpeg')");
eng.close();
}
}