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