2009-05-05 5 views

Antwort

0

Ich weiß nicht, wie ich das tun kann, was Sie wirklich verlangen. Wenn das Skript manuell beendet wird und nicht manuell beendet wird, können Sie das Skript möglicherweise starten, damit das Popup-Fenster minimiert wird.

Siehe Launch Application in a minimized state from Java

Starten Sie das Skript mit

matlab -nojvm -nosplash -nodesktop -wait -r script_name 

Sie das "-wait" wollen, sonst MATLAB wird sofort zurück.

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

2

Schauen Sie sich die Matlab Engine. Die Engine läuft im Hintergrund (ohne GUI oder sichtbare Befehlszeile) und Sie rufen es von Ihrem Code auf. Die Beispiele sind in C und Fortran, leider nicht Java. Ich habe es einmal mit Python arbeiten, aber ich erinnere mich nicht an die Details.

Siehe auch: 2 ways to use the engine with Java.

ETA: 'matlab -r "Anweisung"' in der (Windows) Kommandozeile wird "Anweisung" in Matlab ausführen. Mein Python-Hack setzte meinen Matlab-Code in eine .m-Datei und meine Daten in eine Textdatei, die von der .m-Datei referenziert wurde, und sendete dann 'matlab -r myFile.m' an die Windows-Befehlszeile. Siehe matlab Windows command. Auch hier gibt es kein sichtbares GUI für Matlab.

1

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.

0

matlabcontrol ist eine Java-API, mit der Sie mit einer laufenden Sitzung von MATLAB interagieren können. Es wird die Sitzung starten und dann können Sie eval und feval aufrufen sowie Variablen setzen und abrufen. Standardmäßig ist die Sitzung von MATLAB sichtbar, aber sie ist can be hidden. Unter Windows wird es nicht vollständig ausgeblendet, da dies von MATLAB nicht unterstützt wird. Es wird jedoch minimiert gestartet und es wird kein Begrüßungsbildschirm angezeigt. Um mit Matlabcontrol zu beginnen, werfen Sie einen Blick auf die walkthrough.

Verwandte Themen