从Java调用时,如何禁止MATLAB的命令窗口?

时间:2009-05-05 18:52:47

标签: java matlab

我用Java调用MATLAB但是我想要禁止MATLAB的命令窗口让用户觉得我只使用一个Java程序。

此外,我读到了一些名为MATLAB的独立可执行文件,但它没有用;这对我有帮助吗?

4 个答案:

答案 0 :(得分:2)

查看Matlab Engine。引擎在后台运行(没有GUI或可见的命令行),您可以从代码中调用它。不幸的是,这些例子是在C和Fortran中,而不是Java。我使用Python一次,但我不记得细节。

另见:2 ways to use the engine with Java

ETA:'(Windows)命令行上的'matlab -r“语句”'将在Matlab中执行“statement”。我的Python黑客将我的Matlab代码放在.m文件中,我的数据放入.m文件引用的文本文件中,然后将'matlab -r myFile.m'发送到Windows命令行。请参阅matlab Windows command。同样,Matlab没有这种可见的GUI。

答案 1 :(得分:1)

当你说“从Java调用它”时,你是否正在向Matlab进行批量计算,或者你想在你的进程中嵌入一个长期存在的Matlab会话并从Java代码中反复调用M代码?您想要运行哪些操作系统?

Matlab有一些部署工具,可以让您在宿主语言(如C / C ++或Java)中嵌入Matlab解释器和Matlab源代码集合。这就是“Matlab编译器” - 不是真正的编译器,而是一个将Matlab运行时与.m源代码一起打包在看起来像DLL或应用程序的包中的工具。 Matlab“独立应用程序”是以这种方式打包的Matlab代码以及调用M代码中的应用程序入口点的瘦C包装器。

Matlab Java Builder类似于将这个部署的Matlab引擎捆绑在Java类中。如果您想获得它的许可证,那么将Matlab嵌入Java应用程序中可以简化和美观。这可能就是你想要的。

这些部署的Matlab应用程序没有命令窗口,因为它们旨在与您的应用程序融合。他们生活在同一个过程中。而且,重要的是,他们不需要许可证费用来运行已部署的应用程序。抛弃常规Matlab要求运行它的所有用户都拥有Matlab和使用的每个工具箱的许可。

如果炮轰,“matlab -nosplash -nodesktop”命令行将禁止Unix上的GUI。但在Windows上,您仍然可以获得最小的Matlab命令窗口。 Windows上的“-automation”开关至少会使其最小化。我不知道在启动时完全压制它的方法。

然而,一旦Matlab运行,你就可以利用Matlab GUI本身用Java实现的事实,让它自己隐藏起来。使用“-r”命令行开关或startup.m运行此matlab会话以运行此hidematlab()。请注意,这是一个使用未记录的Matlab内部的hack,并且MathWorks肯定不支持。

function hidematlab()
%HIDEMATLAB Hide the main Matlab desktop window (HACK)

dtWin = desktopwindow();
if ~isempty(dtWin)
    dtWin.setVisible(0);
end

function out = desktopwindow()
%DESKTOPWINDOW Find the main Matlab desktop window (HACK)

wins = java.awt.Window.getOwnerlessWindows();
out = [];
for i = 1:numel(wins)
    if isa(wins(i), 'com.mathworks.mde.desk.MLMainFrame')
        out = wins(i);
        return;
    end
end

在Windows上进行炮击时要小心,在Matlab本身就是一个GUI应用程序。如果你的M代码抛出了冒泡到顶层或段错误的错误,你可能会发现你的Matlab会话挂起,等待不存在的用户输入,而不是给你一个错误。

答案 2 :(得分:0)

我不知道如何完全按照你的要求做事。如果您的脚本手动退出而不是自然终止,您可以启动脚本,以便弹出窗口最小化。

请参阅 Launch Application in a minimized state from Java

使用

启动脚本
    matlab -nojvm -nosplash -nodesktop -wait -r script_name

您将需要“-wait”,否则MATLAB将立即返回。

请参阅 How can I stop MATLAB from returning until after a command-line script completes?

答案 3 :(得分:0)

matlabcontrol是一个Java API,它允许您与正在运行的MATLAB会话进行交互。它将启动会话,然后您将能够调用eval和feval以及设置和获取变量。默认情况下,MATLAB的会话将是可见的,但can be hidden。在Windows上它不会被完全隐藏,因为MATLAB不支持它,但它将被最小化并且不会显示闪屏。要开始使用matlabcontrol,请查看walkthrough