Вы можете подключить 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(); } }