exponenta event banner

Подключение Java к работающему сеансу MATLAB

Поиск и подключение к MATLAB

Модуль Java ® можно подключить к общим сеансам MATLAB ®, которые выполняются на локальном компьютере. Для подключения к общему сеансу MATLAB:

  • Запустите MATLAB как сеанс общего ядра или сделайте запущенный процесс 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();
    }
}

Связанные темы