Как я могу подавить командное окно MATLAB при вызове его из Java? - PullRequest
1 голос
/ 05 мая 2009

Я звоню в MATLAB с Java, но я хочу отключить командное окно MATLAB, чтобы пользователи чувствовали, что я использую только одну программу, которая является Java.

Кроме того, я читал о чем-то, что называется автономный исполняемый файл для MATLAB, но это не сработало; это поможет мне?

Ответы [ 4 ]

2 голосов
/ 05 мая 2009

Проверьте Matlab Engine . Движок работает в фоновом режиме (без графического интерфейса или видимой командной строки), и вы вызываете его из своего кода. К сожалению, примеры приведены на C и Fortran, а не на Java. Однажды я работал с Python, но подробностей не помню.

Также см .: 2 способа использования движка с Java .

ETA: 'matlab -r "оператор"' в командной строке (Windows) будет выполнять "оператор" в Matlab. Мой хакер Python помещал мой код Matlab в файл .m, а мои данные - в текстовый файл, на который ссылается файл .m, а затем отправлял 'matlab -r myFile.m' в командную строку Windows. См. Команду matlab для Windows . Опять же, здесь нет видимого графического интерфейса для Matlab.

1 голос
/ 13 мая 2009

Когда вы говорите «вызывая его из Java», вы предлагаете Matlab для пакетных вычислений или хотите встроить долгоживущий сеанс Matlab в ваш процесс и повторно вызывать M-код из кода Java? На каких ОС вы хотите работать?

Matlab имеет несколько инструментов развертывания, которые позволяют вам встраивать интерпретатор Matlab и коллекцию исходного кода Matlab в основной язык, такой как C / C ++ или Java. Вот что такое «компилятор Matlab» - не настоящий компилятор, а инструмент, который упаковывает среду исполнения Matlab вместе с исходным кодом .m в пакет, который выглядит как DLL или приложение. Matlab «автономное приложение» - это код Matlab, который был упакован таким образом вместе с тонкой оболочкой C, которая вызывает точку входа приложения в ваш код M.

Java-конструктор Matlab - это то же самое, что объединяет развернутый движок Matlab в классе Java. Если вы хотите получить лицензию на нее, это может сделать ее просто и косметически чистой для встраивания Matlab в ваше Java-приложение. Это, вероятно, то, что вы хотите.

Эти развернутые приложения Matlab не имеют командного окна, потому что они предназначены для того, чтобы сливаться с вашим приложением. Они живут в одном процессе. И, что важно, они не требуют лицензионных отчислений за запуск развернутого приложения. Для обычного Matlab требуется, чтобы все пользователи, на которых он запущен, имели лицензии на Matlab и каждый используемый набор инструментов.

При отключении командная строка "matlab -nosplash -nodesktop" подавляет графический интерфейс в Unix. Но в Windows вы все равно получите минимальное командное окно Matlab. Переключатель «-automation» в Windows по крайней мере сделает его минимальным. Я не знаю, как полностью отключить его при запуске.

Однако после запуска Matlab вы можете воспользоваться тем, что графический интерфейс Matlab сам реализован на Java, и он может скрыться. Получите сеанс Matlab для запуска этого hidematlab () с помощью ключа командной строки "-r" или startup.m. Обратите внимание, что это хак с использованием недокументированных внутренних объектов 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 по своей сути является приложением с графическим интерфейсом. Если ваш M-код выдает ошибки, которые доходят до верхнего уровня или segfaults, вы можете обнаружить, что ваш сеанс Matlab завис, ожидая несуществующего пользовательского ввода, вместо того, чтобы возвращать вам ошибку.

0 голосов
/ 09 июля 2011

matlabcontrol - это API-интерфейс Java, который позволит вам взаимодействовать с запущенным сеансом MATLAB. Он запустит сессию, а затем вы сможете вызывать eval и feval, а также устанавливать и получать переменные. По умолчанию сеанс MATLAB будет виден, но его можно скрыть . В Windows он не будет полностью скрыт, поскольку он не поддерживается MATLAB, но он будет запущен в свернутом виде и не будет отображаться заставка. Чтобы начать использовать matlabcontrol, взгляните на прохождение .

0 голосов
/ 05 мая 2009

Я не знаю, как сделать то, что вы просите полностью. Если ваш сценарий выполняет выход вручную вместо естественного завершения, вы можете запустить сценарий так, чтобы всплывающее окно было свернуто.

См. Запуск приложения в свернутом состоянии из Java

Запустите скрипт с

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

Вам понадобится "-wait", иначе MATLAB немедленно вернется.

См. Как я могу остановить возврат MATLAB до завершения сценария командной строки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...