Using MATLAB Handle Objects in Java
MATLAB Handle Objects
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.
Java HandleObject Class
Use 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.
Set Graphics Object Properties from 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
doublearray calleddata.Cast the
dataarray to anObjectso MATLAB interprets the array as one argument toplot.Return
HandleObjectarrayhfrom MATLAB with the line handles.Call the MATLAB
setfunction to set theLineWidthproperty of the line handles to 2.0. Convert the name of theLineWidthproperty from aStringto achar[]because thesetfunction requires property names to be MATLABchararrays.Pause for
5seconds 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();
}
}