MATLAB コマンド ウィンドウの出力を Java にリダイレクト
MATLAB コマンド ウィンドウへの出力
MATLAB® では、エラー メッセージと、セミコロンで終了していない関数の出力を MATLAB コマンド ウィンドウに表示します。java.io.StringWriter
を使用して、この出力を Java® にリダイレクトすることができます。MatlabEngine
の feval
、fevalAsync
、eval
、evalAsync
の各メソッドは、出力ストリームの使用による MATLAB 出力のリダイレクトをサポートしています。
MATLAB 出力のリダイレクト
MATLAB の whos
コマンドは、現在のワークスペース変数に関する情報を MATLAB コマンド ウィンドウに表示します。StringWriter
を使用して、この出力を 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();
}
}
MATLAB エラー メッセージの Java へのリダイレクト
このコード例では、構文エラー (一重引用符が不揃い) がある MATLAB ステートメントの評価が試みられます。このステートメントを MATLAB に入力するとエラーが発生します。
disp('Hello'')
MATLAB のコマンド ウィンドウに次のエラー メッセージが返されます。
disp('Hello'')
↑
Error: Character vector is not terminated properly.
このエラー メッセージを Java にリダイレクトするには、StringWriter
を eval
メソッドで使用します。エラーによりスローされた MatlatSyntaxException
の例外を取得し、MATLAB エラー メッセージを 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();
}
}