Объекты указателя 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(); } }