如何使用matlabcontrol从Java调用Matlab函数,而无需每次启动新会话?

如何使用matlabcontrol从Java调用Matlab函数,而无需每次启动新会话?,java,matlab,Java,Matlab,我使用matlabcontrol从Java调用Matlab函数 我的代码运行良好,但每当我用Java运行代码时,它就会打开新的Matlab会话。 我根据Javadoc编辑,但我想我遗漏了一些东西 我还尝试了使用/不使用“proxy.disconnect()”,但它仍然会打开新的Matlab会话。 任何提示都会很有帮助。我被卡住了 下面是我的Java代码 import matlabcontrol.MatlabConnectionException; import matlabcontrol.Mat

我使用matlabcontrol从Java调用Matlab函数

我的代码运行良好,但每当我用Java运行代码时,它就会打开新的Matlab会话。 我根据Javadoc编辑,但我想我遗漏了一些东西

我还尝试了使用/不使用“proxy.disconnect()”,但它仍然会打开新的Matlab会话。 任何提示都会很有帮助。我被卡住了

下面是我的Java代码

import matlabcontrol.MatlabConnectionException;
import matlabcontrol.MatlabInvocationException;
import matlabcontrol.MatlabProxy;
import matlabcontrol.MatlabProxyFactory;
import matlabcontrol.MatlabProxyFactoryOptions;

public class callSaliencymap {

/**
 * @param args
 */
public static void main(String[] args) throws MatlabConnectionException, MatlabInvocationException
{
    //Create a proxy, which we will use to control MATLAB
    MatlabProxyFactory factory = new MatlabProxyFactory();
    MatlabProxy proxy = factory.getProxy();

    MatlabProxyFactoryOptions options = new MatlabProxyFactoryOptions.Builder()
    .setUsePreviouslyControlledSession(true)
    .setHidden(true)
    .build();

    factory = new MatlabProxyFactory(options);




    //Create proxy factory


    //test the saliencymap
    Object[] saliencylocation = proxy.returningFeval("runActivation",1,"tank.bmp",1);
    System.out.println(saliencylocation[0]);

    //Disconnect the proxy from MATLAB
    //proxy.disconnect();
}

尝试直接使用Matlab引擎而不是Matlab控件。

这就是我所做的,希望能有所帮助

MatlabProxyFactoryOptions options = new MatlabProxyFactoryOptions.Builder()
    .setUsePreviouslyControlledSession(true)
    .setHidden(true)
    .setMatlabLocation(null).build(); 

    MatlabProxyFactory factory = new MatlabProxyFactory(options);
    MatlabProxy proxy = factory.getProxy();

我想你的答案是:非常感谢,里奇。我查看了帖子并尝试运行代码,但它仍然会打开每个新的Matlab会话。我想我还是错过了一些东西。我从未使用matlabcontrol,因此无法提供更多建议。代码中的示例名为addpath,然后在该目录中运行脚本。只有在一个持久的matlab会话中执行所有命令时,该示例才能工作。这就是为什么我认为这是你想要的解决方案。我不知道你为什么会被否决,这很有效!非常感谢。还有一个问题是,这段代码对于matlabcontrol以前打开的Matlab会话工作得很好(因此,它不会打开每个新会话,也不会只打开一个会话!),但当我第一次使用这段代码打开“新”Matlab会话时,Matlab只显示了一个命令窗口,而不是工作区、当前目录,等等,你也遇到过这个问题吗?
MatlabProxyFactoryOptions options = new MatlabProxyFactoryOptions.Builder()
                .setUsePreviouslyControlledSession(true)
                 //.setPort(2100)
                .build();           

MatlabProxyFactory factory=new MatlabProxyFactory(options );
MatlabProxy proxy=factory.getProxy();
proxy.disconnect();//this is very important