Можно соединить механизм Java® с разделяемыми сеансами MATLAB®, которые работают на локальной машине. Соединяться с разделяемым сеансом работы с MATLAB:
Запустите MATLAB как разделяемую сессию Engine или сделайте рабочий процесс MATLAB совместно использованным с помощью matlab.engine.shareEngine
.
Найдите имена сеансов совместной работы MATLAB с помощью статического метода MatlabEngine.findMatlabAsync
или MatlabEngine.findMatlab
.
Передайте строку, содержащую имя разделяемого сеанса работы с MATLAB к статическому методу MatlabEngine.connectMatlabAsync
или MatlabEngine.connectMatlab
. Эти методы соединяют механизм 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 matlab.engine.shareEngine
. Выполнение так избавляет от необходимости использовать 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(); } }