Когда вы говорите «вызывая его из 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 завис, ожидая несуществующего пользовательского ввода, вместо того, чтобы возвращать вам ошибку.