実行中の MATLAB セッションへの Java の接続
MATLAB の検索と接続
ローカル マシンで実行中の共有 MATLAB® セッションに Java® エンジンを接続することができます。共有 MATLAB セッションに接続するには、以下を実行します。
MATLAB を共有エンジン セッションとして起動するか、
matlab.engine.shareEngineを使用して実行中の MATLAB プロセスを共有にします。MatlabEngine.findMatlabまたはMatlabEngine.findMatlabAsync静的メソッドを使用して、MATLAB 共有セッションの名前を検索します。共有 MATLAB セッションの名前が含まれる文字列を
MatlabEngine.connectMatlabまたはMatlabEngine.connectMatlabAsync静的メソッドに渡します。これらのメソッドにより、Java エンジンが共有セッションに接続されます。
MatlabEngine.connectMatlab や MatlabEngine.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.findMatlab や MatlabEngine.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();
}
}