Соединение Java с рабочим сеансом работы с MATLAB

Нахождение и соединение с MATLAB

Можно соединить механизм Java® с разделяемыми сеансами 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 в сеанс совместной работы путем вызова 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 в сеанс совместной работы путем вызова 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();
    }
}

Похожие темы