Объекты указателя MATLAB® являются экземплярами класса handle. Доступ к объектам указателя MATLAB позволяет вам установить значения публичных свойств на тех объектах. Например, все графические объекты MATLAB и объекты пользовательского интерфейса являются объектами указателя.
Используйте класс com.mathworks.matlab.types.HandleObject, чтобы представлять объекты указателя, возвращенные от MATLAB до Java®. Можно передать экземпляр HandleObject только сеансу работы с MATLAB, в котором он был создан. Вы не можете создать HandleObject на Java.
Функция plot MATLAB возвращает объекты указателя, ссылающиеся на строки в графике. Используйте эти указатели с функцией set, чтобы изменить внешний вид графика путем изменения свойств строк.
Этот пример выполняет следующие вызовы функции в MATLAB:
% Create a 2-by-3 array of doubles data = [1,2,3;-1,-2,-3]; % Plot the data and return the line handles h = plot(data); % Set the line width to 2 points set(h,'LineWidth',2); % Pause for 5 seconds, just to see the result pause(5)
Код Java использует эти шаги, чтобы вызвать подписание кода MATLAB, как описано:
Создайте 2D массив double под названием data.
Бросьте массив data к Object, таким образом, MATLAB интерпретирует массив в качестве одного аргумента к plot.
Возвратите массив HandleObject h в MATLAB с указателями строки.
Вызовите функцию set MATLAB, чтобы установить свойство LineWidth указателей строки на 2,0. Преобразуйте имя свойства LineWidth от String до char[], потому что функция set требует, чтобы именами свойства был MATLAB массивы char.
Сделайте паузу в течение секунд 5 и затем закройте движок MATLAB.
import com.mathworks.engine.*;
import com.mathworks.matlab.types.*;
public class PassHandleObject {
public static void main(String[] args) throws Exception {
MatlabEngine eng = MatlabEngine.startMatlab();
double[][] data = {{1.0, 2.0, 3.0}, {-1.0, -2.0, -3.0}};
HandleObject[] h = eng.feval("plot", (Object) data);
String lw = ("LineWidth");
eng.feval(0, "set", h, lw.toCharArray(), 2.0);
eng.eval("pause(5)");
eng.close();
}
}