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
配列を作成します。配列
data
をObject
にキャストします。これにより、MATLAB はこの配列をplot
の 1 つの引数として解釈します。HandleObject
配列h
を、ライン ハンドルと共に MATLAB から返します。MATLAB 関数
set
を呼び出して、ライン ハンドルのLineWidth
プロパティを 2.0 に設定します。関数set
では、プロパティ名が MATLABchar
配列であることを求められるため、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(); } }