如何在Java中使用matlabcontrol包调用Matlab时隐藏命令窗口?

时间:2015-08-10 14:27:16

标签: java eclipse matlab proxy matlabcontrol

我正在使用Java中的matlabcontrol包连接到Matlab r2015a并启动一个选定的脚本。这一切都很有效,但每次运行脚本时,Matlab都会打开一个带输出的命令窗口。此输出已在Eclipse中返回,因此它是多余的。

我正在通过以下方式使用Matlab创建会话:

public interface IMatLab {

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

public static String runScript(String pathFunc, int param1, int param2)
        throws MatlabConnectionException, MatlabInvocationException {

    MatlabProxy proxy = factory.getProxy();

    // locating MatLab files
    proxy.setVariable("path", pathFunction);
    proxy.eval("addpath(path)");

    // calling add function in MatLab code
    Object[] obj = proxy.returningFeval("add", 1, param1, param2);
    String outputScript = toString(obj[0]);

    return outputScript;
}

调用Matlab时有没有办法隐藏命令窗口?如果'setHidden'为false,它将启动完整的Matlab会话,而不仅仅是命令窗口。

我更喜欢在java本身中这样做。如果那不是一个选项,在Matlab中更改配置也没关系。

1 个答案:

答案 0 :(得分:0)

据我所知,没有使用本机代码就无法做到这一点。原因是:

  1. 由于Matlab没有正式支持其他程序发送命令,因此没有理由让他们在没有任何形式的I / O功能的情况下实现Matlab。

  2. Matlab程序不是运行java代码的JVM的一部分,因此您无法找到一种纯Java方法来更改它(隐藏它或......)。

  3. 所以我猜唯一的方法是使用本机OS API(使用JNA或...)。执行此操作的方式以及是否可行取决于您的操作系统(在Windows中执行此操作请参阅this question)。

    顺便说一句,我认为你应该小心这样做,matlabcontrol库并不完美,有时你会松开与Matlab的连接并打开一个新的Matlab。如果用户无法看到Matlab窗口,您最终可能会运行很多Matlab进程,而不会看到任何进程。