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

How to hide command window while calling Matlab with matlabcontrol package in Java?

我正在使用 Java 中的 matlabcontrol 包连接到 Matlab r2015a 并启动选定的脚本。这一切都很好,但每次我 运行 脚本时,Matlab 都会打开一个带有输出的命令 window。此输出已在 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时隐藏命令window?将 'setHidden' 设置为 false,它会启动完整的 Matlab 会话,而不仅仅是命令 window.

我更喜欢在 java 中完成此操作。如果那不是一个选项,在 Matlab 中更改配置也可以。

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

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

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

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

顺便说一下,我认为你应该小心操作,matlabcontrol 库并不完美,有时你会失去与 Matlab 的连接并打开一个新的 Matlab。如果用户看不到 Matlab window,您最终可能会拥有很多 Matlab 进程 运行,而一个也看不到。