Main Content

Java での MATLAB ハンドル オブジェクトの使用

MATLAB ハンドル オブジェクト

MATLAB® ハンドル オブジェクトは、handle クラスのインスタンスです。MATLAB ハンドル オブジェクトにアクセスすると、それらオブジェクトのパブリック プロパティの値を設定することができます。たとえば、MATLAB のグラフィックス オブジェクトとユーザー インターフェイス オブジェクトはすべてハンドル オブジェクトです。

Java HandleObject クラス

com.mathworks.matlab.types.HandleObject クラスを使用して、MATLAB から Java® に返されたハンドル オブジェクトを表します。HandleObject のインスタンスは、そのインスタンスが作成された MATLAB セッションにしか渡せません。Java で HandleObject を作成することはできません。

Java からのグラフィックス オブジェクトのプロパティの設定

MATLAB 関数 plot は、グラフ内のラインを参照するハンドル オブジェクトを返します。これらのハンドルを関数 set で使用し、ラインのプロパティを変更することでグラフの外観を修正します。

この例では、MATLAB で以下の関数呼び出しを実行します。

% Create a 2-by-3 array of doubles
data = [1,2,3;-1,-2,-3];
% Plot the data and return the line handles
h = plot(data);
% Set the line width to 2 points
set(h,'LineWidth',2);
% Pause for 5 seconds, just to see the result
pause(5)

以下の Java コードでは、次の手順を使って MATLAB コードを記述どおりに実行します。

  • data という 2 次元 double 配列を作成します。

  • 配列 dataObject にキャストします。これにより、MATLAB はこの配列を plot の 1 つの引数として解釈します。

  • HandleObject 配列 h を、ライン ハンドルと共に MATLAB から返します。

  • MATLAB 関数 set を呼び出して、ライン ハンドルの LineWidth プロパティを 2.0 に設定します。関数 set では、プロパティ名が MATLAB char 配列であることを求められるため、LineWidth プロパティの名前を String から char[] に変更します。

  • 5 秒間一時停止してから MATLAB エンジンを終了します。

import com.mathworks.engine.*;
import com.mathworks.matlab.types.*;

public class PassHandleObject {
    public static void main(String[] args) throws Exception {
        MatlabEngine eng = MatlabEngine.startMatlab();
        double[][] data = {{1.0, 2.0, 3.0}, {-1.0, -2.0, -3.0}};
        HandleObject[] h = eng.feval("plot", (Object) data);
        String lw = ("LineWidth");
        eng.feval(0, "set", h, lw.toCharArray(), 2.0);
        eng.eval("pause(5)");
        eng.close();
    }
}

関連するトピック