Redirect MATLAB Command Window Output to Java
Output to MATLAB Command Window
MATLAB® displays error messages and the output from functions
that are not terminated with a semicolon in the MATLAB command
window. You can redirect this output to Java® using a java.io.StringWriter
.
The MatlabEngine
feval
, fevalAsync
, eval
,
and evalAsync
methods support the use of output
streams to redirect MATLAB output.
Redirect MATLAB Output
The MATLAB whos
command
displays information about the current workspace variables in the MATLAB command
window. Use a StringWriter
to stream this output
to Java.
import com.mathworks.engine.*; import java.io.*; public class RedirectOutput { public static void main(String[] args) throws Exception { MatlabEngine engine = MatlabEngine.startMatlab(); // Evaluate expressions that create variables eng.evalAsync("[X,Y] = meshgrid(-2:.2:2);"); eng.evalAsync("Z = X.*exp(-X.^2 - Y.^2);"); // Get the output of the whos command StringWriter writer = new StringWriter(); eng.eval("whos", writer, null); System.out.println(writer.toString()); writer.close(); eng.close(); } }
Redirect MATLAB Error Messages to Java
This example code attempts to evaluate a MATLAB statement that has a syntax error (unbalanced single quotation marks). Entering this statement in MATLAB causes an error:
disp('Hello'')
MATLAB returns this error message in the command window:
disp('Hello'')
↑
Error: Character vector is not terminated properly.
To redirect this error message to Java, use a StringWriter
with
the eval
method. Catch the MatlatSyntaxException
exception
thrown by the error and write the MATLAB error message to Java.
import com.mathworks.engine.*; import java.io.*; public class javaRedirectOut { public static void main(String[] args) throws Exception { MatlabEngine engine = MatlabEngine.startMatlab(); StringWriter writer = new StringWriter(); try { eng.eval("disp('Hello'')", null, writer); } catch (MatlabSyntaxException e) { System.out.println("Error redirected to Java: "); System.out.println(writer.toString()); } writer.close(); eng.close(); } }