Main Content

実行中の MATLAB セッションへの Java の接続

MATLAB の検索と接続

ローカル マシンで実行中の共有 MATLAB® セッションに Java® エンジンを接続することができます。共有 MATLAB セッションに接続するには、以下を実行します。

  • MATLAB を共有エンジン セッションとして起動するか、matlab.engine.shareEngine を使用して実行中の MATLAB プロセスを共有にします。

  • MatlabEngine.findMatlab または MatlabEngine.findMatlabAsync 静的メソッドを使用して、MATLAB 共有セッションの名前を検索します。

  • 共有 MATLAB セッションの名前が含まれる文字列を MatlabEngine.connectMatlab または MatlabEngine.connectMatlabAsync 静的メソッドに渡します。これらのメソッドにより、Java エンジンが共有セッションに接続されます。

MatlabEngine.connectMatlabMatlabEngine.connectMatlabAsync を呼び出す際に共有 MATLAB セッションの名前を指定しない場合、エンジンは最初に作成された MATLAB セッションを使用します。使用可能な共有 MATLAB セッションがない場合、エンジンは共有 MATLAB セッションを作成し、このセッションに接続します。

これらのメソッドについては、com.mathworks.engine.MatlabEngine を参照してください。

MATLAB への同期的な接続

MATLAB から matlab.engine.shareEngine を呼び出して、MATLAB セッションを共有セッションに変換します。

matlab.engine.shareEngine

セッションを検索し、Java から同期的に接続します。

import  com.mathworks.engine.*;

public class javaFindConnect {
    public static void main(String[] args) throws Exception {
        String[] engines = MatlabEngine.findMatlab();
        MatlabEngine eng = MatlabEngine.connectMatlab(engines[0]);
        // Execute command on shared MATLAB session
        eng.eval("plot(1:10); print('myPlot','-djpeg')");
        eng.close();
    }
}

MATLAB への非同期的な接続

MATLAB から matlab.engine.shareEngine を呼び出して、MATLAB セッションを共有セッションに変換します。

matlab.engine.shareEngine

セッションを検索し、Java から非同期的に接続します。

import  com.mathworks.engine.*;
import java.util.concurrent.Future;

public class javaFindConnectAsync {
    public static void main(String[] args) throws Exception {
        Future<String[]> eFuture = MatlabEngine.findMatlabAsync();
        String[] engines = eFuture.get();
        Future<MatlabEngine> engFuture = MatlabEngine.connectMatlabAsync(engines[0]);
        // Work on other thread
        MatlabEngine eng = engFuture.get();
        // Execute command on shared MATLAB session
        Future<Void> vFuture = eng.evalAsync("plot(1:10); print('myPlot','-djpeg')");
        eng.close();
    }
}

共有セッションの名前の指定

MATLAB 関数 matlab.engine.shareEngine の実行時に、共有 MATLAB セッションの名前を指定することができます。これにより、MatlabEngine.findMatlabMatlabEngine.findMatlabAsync を使用して名前を検索する必要がなくなります。

たとえば、MATLAB を起動して、共有セッションに myMatlabEngine という名前を指定します。

matlab -r "matlab.engine.shareEngine('myMatlabEngine')"

Java からこの名前の付いた MATLAB セッションに接続します。

import  com.mathworks.engine.*;

public class javaNameConnect {
    public static void main(String[] args) throws Exception {
        String[] myEngine = {"myMatlabEngine"};
        MatlabEngine eng = MatlabEngine.connectMatlab(myEngine[0]);
        // Execute command on shared MATLAB session
        eng.eval("plot(1:10); print('myPlot','-djpeg')");
        eng.close();
    }
}

関連するトピック