Wenn Sie "aus Java aufrufen" sagen, schellen Sie Matlab für Batch-Berechnungen aus, oder möchten Sie eine langlebige Matlab-Sitzung in Ihren Prozess einbetten und M-Code wiederholt aus Java-Code aufrufen? Auf welchen Betriebssystemen möchten Sie laufen?
Matlab verfügt über einige Implementierungstools, mit denen Sie einen Matlab-Interpreter und eine Sammlung von Matlab-Quellcode in eine Hostsprache wie C/C++ oder Java einbetten können. Das ist der "Matlab-Compiler" - kein echter Compiler, sondern ein Tool, das eine Matlab-Laufzeitumgebung zusammen mit .m-Quellcode in ein Paket packt, das wie eine DLL oder Anwendung aussieht. Eine Matlab "Standalone-Anwendung" ist Matlab-Code, der auf diese Weise zusammen mit einem dünnen C-Wrapper verpackt wurde, der einen Anwendungspunkt in Ihrem M-Code aufruft.
Die Matlab Java Builder ist eine ähnliche Sache, die diese implementierte Matlab-Engine in einer Java-Klasse bündelt. Wenn Sie eine Lizenz dafür erhalten möchten, könnte es einfach und kosmetisch sauber sein, Matlab in Ihre Java-Anwendung einzubetten. Das ist wahrscheinlich das, was du willst.
Diese bereitgestellten Matlab-Apps verfügen nicht über ein Befehlsfenster, da sie sich an Ihre Anwendung anschmiegen sollen. Sie leben in demselben Prozess. Außerdem benötigen sie keine Lizenzgebühren für die Ausführung der bereitgestellten App. Wenn Sie auf reguläres Matlab zugreifen, müssen alle Benutzer, die es ausführen, Lizenzen für Matlab und jede verwendete Toolbox besitzen.
Wenn ausgeblendet wird, unterdrückt die Befehlszeile "matlab -nosplash -nodesktop" die GUI unter Unix. Aber unter Windows erhalten Sie immer noch ein minimales Matlab-Befehlsfenster. Der Schalter "-automation" unter Windows wird es zumindest minimieren. Ich kenne keine Möglichkeit, es beim Start komplett zu unterdrücken.
Sobald Matlab jedoch läuft, können Sie die Tatsache nutzen, dass die Matlab-GUI selbst in Java implementiert ist und sich selbst verstecken muss. Rufen Sie Ihre Matlab-Sitzung auf, um hidematlab() mit dem Befehlszeilenschalter "-r" oder einem startup.m auszuführen. Beachten Sie, dass dies ein Hack ist, der nicht dokumentierte Matlab-Interna verwendet und von MathWorks sicherlich nicht unterstützt wird.
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
Vorsicht vor gotchas, wenn Sie unter Windows ausschwärmen, wo Matlab inhärent eine GUI-App ist. Wenn Ihr M-Code Fehler auslöst, die bis zur obersten Ebene oder zu den Unterschieden führen, kann es sein, dass Ihre Matlab-Sitzung unterbrochen wird und auf nicht vorhandene Benutzereingaben wartet, anstatt Ihnen einen Fehler zu melden.