Connect Java to Running MATLAB Session
Find and Connect to MATLAB
You can connect the Java® engine to shared MATLAB® sessions that are running on the local machine. To connect to a shared MATLAB session:
Start MATLAB as a shared engine session, or make a running MATLAB process shared using
matlab.engine.shareEngine
.Find the names of the MATLAB shared sessions using the
MatlabEngine.findMatlab
orMatlabEngine.findMatlabAsync
static method.Pass the string containing the name of the shared MATLAB session to the
MatlabEngine.connectMatlab
orMatlabEngine.connectMatlabAsync
static method. These methods connect the Java engine to the shared session.
If you do not specify the name of a shared MATLAB session
when calling MatlabEngine.connectMatlab
or MatlabEngine.connectMatlabAsync
,
the engine uses the first shared MATLAB session created. If there
are no shared MATLAB sessions available, the engine creates a
shared MATLAB session and connects to this session.
For a description of these methods, see com.mathworks.engine.MatlabEngine
Connect to MATLAB Synchronously
Convert the MATLAB session to a shared session by calling matlab.engine.shareEngine
from MATLAB.
matlab.engine.shareEngine
Find the session and connect synchronously from 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(); } }
Connect to MATLAB Asynchronously
Convert the MATLAB session to a shared session by calling matlab.engine.shareEngine
from MATLAB.
matlab.engine.shareEngine
Find the session and connect asynchronously from 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(); } }
Specify Name of Shared Session
You can specify the name of the shared MATLAB session when
you execute the matlab.engine.shareEngine
MATLAB function.
Doing so eliminates the need to use MatlabEngine.findMatlab
or MatlabEngine.findMatlabAsync
to
find the name.
For example, start MATLAB and name the shared session myMatlabEngine
.
matlab -r "matlab.engine.shareEngine('myMatlabEngine')"
Connect to the named MATLAB session from Java.
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(); } }