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
% Pause for 5 seconds, just to see the result

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);

Related Topics