MATLAB® handle objects are instances of the handle
class. Accessing MATLAB handle
objects enables you to set the values of public properties on those
objects. For example, all MATLAB graphics and user interface
objects are handle objects.
HandleObject
ClassUse the com.mathworks.matlab.types.HandleObject
class
to represent handle objects returned from MATLAB to Java®.
You can pass the HandleObject
instance only to
the MATLAB session in which it was created. You cannot construct
a HandleObject
in Java.
The MATLAB plot
function
returns the handle objects referencing the lines in the graph. Use
these handles with the set
function
to modify the appearance of the graph by changing the properties of
the lines.
This example executes the following function calls in 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)
The Java code uses these steps to cause the execution of the MATLAB code as described:
Create a 2D double
array called data
.
Cast the data
array to an Object
so MATLAB interprets
the array as one argument to plot
.
Return HandleObject
array h
from MATLAB with
the line handles.
Call the MATLAB set
function
to set the LineWidth
property of the line handles
to 2.0. Convert the name of the LineWidth
property
from a String
to a char[]
because
the set
function requires property names to be MATLAB char
arrays.
Pause for 5
seconds and then close
the MATLAB engine.
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(); } }