Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何抑制MATLAB';当从Java调用它时,它的命令窗口是什么?_Java_Matlab - Fatal编程技术网

如何抑制MATLAB';当从Java调用它时,它的命令窗口是什么?

如何抑制MATLAB';当从Java调用它时,它的命令窗口是什么?,java,matlab,Java,Matlab,我用Java调用MATLAB,但我想抑制MATLAB的命令窗口,让用户感觉我只使用了一个程序,那就是Java 此外,我还读到了一个叫做MATLAB独立可执行文件的东西,但它不起作用;这对我有帮助吗?我不知道有什么办法可以完全满足你的要求。如果脚本手动退出而不是自然终止,则可以启动脚本,从而最小化弹出的窗口 看 开始脚本时使用 matlab -nojvm -nosplash -nodesktop -wait -r script_name 您将需要“-wait”,否则MATLAB将立即返回

我用Java调用MATLAB,但我想抑制MATLAB的命令窗口,让用户感觉我只使用了一个程序,那就是Java


此外,我还读到了一个叫做MATLAB独立可执行文件的东西,但它不起作用;这对我有帮助吗?

我不知道有什么办法可以完全满足你的要求。如果脚本手动退出而不是自然终止,则可以启动脚本,从而最小化弹出的窗口

开始脚本时使用

    matlab -nojvm -nosplash -nodesktop -wait -r script_name
您将需要“-wait”,否则MATLAB将立即返回

请参见查看。引擎在后台运行(没有GUI或可见的命令行),您可以从代码中调用它。不幸的是,这些示例是用C和Fortran编写的,而不是用Java编写的。我曾经用Python开发过一次,但我不记得细节了

另请参见:

ETA:(Windows)命令行上的“matlab-r”语句将在matlab中执行“语句”。我的Python黑客将我的Matlab代码放在一个.m文件中,将我的数据放在一个由.m文件引用的文本文件中,然后将“Matlab-rmyfile.m”发送到Windows命令行。看。同样,Matlab也没有这样的可视GUI。

当你说“从Java调用它”时,你是在向Matlab进行批量计算,还是想在过程中嵌入一个长期的Matlab会话,并从Java代码中反复调用M代码?您希望在什么操作系统上运行

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

这是一个类似的东西,它将这个部署的Matlab引擎捆绑在一个Java类中。如果您想获得它的许可证,那么在Java应用程序中嵌入Matlab将变得简单、美观。这可能是你想要的

这些部署的Matlab应用程序没有命令窗口,因为它们旨在与您的应用程序混合。他们生活在同一个过程中。而且,重要的是,运行部署的应用程序不需要支付许可证费用。要使用普通的Matlab,所有运行它的用户都必须拥有Matlab和所使用的每个工具箱的许可证

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

但是,一旦Matlab运行,您就可以利用MatlabGUI本身是用Java实现的这一事实,并将其隐藏起来。让您的Matlab会话使用“-r”命令行开关或startup.m运行此hidematlab()。请注意,这是一种使用未记录的Matlab内部构件的黑客攻击,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应用程序,在Windows上使用Matlab时,要当心gotchas。如果您的M代码抛出的错误冒泡到顶层或segfaults,您可能会发现您的Matlab会话挂起,等待不存在的用户输入,而不是返回错误。

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