Incorrect Java Data Types

Java String to MATLAB Character Vector

Struct of Character Vectors

Some MATLAB® functions accept a struct of name-value pairs as input arguments. The MATLAB Engine API for Java® provides the com.mathworks.matlab.engine.Struct class to create this data structure in Java and pass it to MATLAB, where it is converted to a MATLAB struct.

Some MATLAB functions that accept struct input require field values to be MATLAB character vectors (char) instead of MATLAB strings (string). To create a Java Struct with the correct type of values, convert from String to char array before passing the variable to MATLAB.

You can use the toCharArray method for the conversion:

char[] on = "on".toCharArray();
char[] yOut = "yOut".toCharArray();
char[] tOut = "tOut".toCharArray();
Struct simParam = new Struct("SaveOutput", on, "OutputSaveName",
        yOut,"SaveTime", on, "TimeSaveName", tOut);

String Argument to Character Vector

When MATLAB functions require char inputs, you can convert the Java String in the function call passed to MATLAB. For example, the MATLAB eval function requires char input:

double result = engine.feval("eval", "3+5");
Undefined function 'eval' for input arguments of type 'string'..

Passing a char array works correctly.

double result = engine.feval("eval", "3+5".toCharArray());

Setting Graphics Object Properties from Java

You can set the values of MATLAB graphics object properties using the handle of the object. Pass the property names and property values as Java char arrays when passing to MATLAB functions.

double[][] data = {{1.0, 2.0, 3.0}, {-1.0, -2.0, -3.0}};
HandleObject[] h = eng.feval("plot", (Object)data);
String property = ("HitTest");
String value = ("off");
eng.feval(0,"set", h, property.toCharArray(), value.toCharArray());

Java Integer to MATLAB double

Some MATLAB functions, such as sqrt restrict the input to double or single precision values. The MATLAB engine converts Java integers to MATLAB int32 values. For MATLAB functions that do not accept integer values, ensure that you pass appropriate numeric values.

double result = engine.feval("sqrt", 4);
Undefined function 'sqrt' for input arguments of type 'int32'.

Passing a double works correctly.

double result = engine.feval("sqrt", 4.0);

Related Topics