【问题标题】:How to hide command window while calling Matlab with matlabcontrol package in Java?java - 如何在Java中使用matlabcontrol包调用Matlab时隐藏命令窗口?
【发布时间】:2023-03-19 22:40:01
【问题描述】:

我正在使用 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 中更改配置也可以。

【问题讨论】:

标签: java eclipse matlab proxy matlabcontrol


【解决方案1】:

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

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

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

    李>

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-11
    • 2017-02-22
    • 2017-07-18
    • 1970-01-01
    • 1970-01-01
    • 2015-11-22
    相关资源
    最近更新 更多