我用Java调用MATLAB但是我想要禁止MATLAB的命令窗口让用户觉得我只使用一个Java程序。
此外,我读到了一些名为MATLAB的独立可执行文件,但它没有用;这对我有帮助吗?
答案 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。