Main Content

MATLAB コマンド ウィンドウの出力を Java にリダイレクト

MATLAB コマンド ウィンドウへの出力

MATLAB® では、エラー メッセージと、セミコロンで終了していない関数の出力を MATLAB コマンド ウィンドウに表示します。java.io.StringWriter を使用して、この出力を Java® にリダイレクトすることができます。MatlabEnginefevalfevalAsyncevalevalAsync の各メソッドは、出力ストリームの使用による 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 にリダイレクトするには、StringWritereval メソッドで使用します。エラーによりスローされた 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();
    }
}

関連するトピック