использование API-интерфейса matlabcontrol для вызова функции matlab из Java в Netbeans - PullRequest
1 голос
/ 01 марта 2012

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

package matcontro;

import matlabcontrol.*;

public class HelloWorld

 {

      public static void main(String[] args) throws MatlabConnectionException, MatlabInvocationException
     {
         // create proxy
         MatlabProxyFactoryOptions options = new MatlabProxyFactoryOptions.Builder()
                 .setUsePreviouslyControlledSession(true)
                 .build();
         MatlabProxyFactory factory = new MatlabProxyFactory(options);
        MatlabProxy proxy = factory.getProxy(); 

         // call builtin function
         proxy.eval("disp('hello world')");

         // call user-defined function (must be on the path)
         proxy.eval("addpath('C:\\ Users\\HASENDE\\My Documents\\MATLAB')");
         proxy.feval("myfunc");
         proxy.eval("rmpath('C:\\ Users\\HASENDE\\My Documents\\MATLAB')");

         // close connection
         proxy.disconnect();
     }
 }

Ошибка, которую я получаю, приведена ниже;

run:

Исключение в потоке "main" matlabcontrol.MatlabConnectionException:Не удалось запустить MATLAB.Команда: [matlab, -r, javaaddpath 'C: \ Users \ HASENDE \ Documents \ NetBeansProjects \ Библиотеки путей к классам Java \ matlabcontrol-4.0.0.jar';matlabcontrol.MatlabClassLoaderHelper.configureClassLoading ();javarmpath 'C: \ Users \ HASENDE \ Documents \ NetBeansProjects \ Библиотеки путей к классам Java \ matlabcontrol-4.0.0.jar';matlabcontrol.MatlabConnector.connectFromMatlab ( 'PROXY_RECEIVER_01caa56d-9ed7-4e39-a45b-345051024d49', 2100);]

на matlabcontrol.RemoteMatlabProxyFactory.createProcess (RemoteMatlabProxyFactory.java:305) в matlabcontrol.RemoteMatlabProxyFactory.requestProxy (RemoteMatlabProxyFactory.java: 116)

в matlabcontrol.RemoteMatlabProxyFactory.getProxy (RemoteMatlabProxyFactory.java:134)

    at matlabcontrol.MatlabProxyFactory.getProxy(MatlabProxyFactory.java:81)

    at matcontro.HelloWorld.main(HelloWorld.java:21)

Причина: java.io.IOException: Невозможно запустить программу «matlab»: ошибка CreateProcess= 2, система не может найти файл, указанный в java.lang.ProcessBuilder.start (ProcessBuilder.java:1029) в matlabcontrol.RemoteMatlabProxyFactory.createProcess (RemoteMatlabProxyFactory.java:292) ... еще 4

Причиненby: java.io.IOException: CreateProcess error = 2, система не может найти указанный файл

    at java.lang.ProcessImpl.create(Native Method)

    at java.lang.ProcessImpl.<init>(ProcessImpl.java:188)

    at java.lang.ProcessImpl.start(ProcessImpl.java:132)

    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1021)   ... 5 more

Java Результат: 1

BUILD SUCCESSFUL (общее время: 4 секунды)

Ответы [ 2 ]

3 голосов
/ 24 февраля 2013

Проблема в том, что matlabcontrol в Windows и Linux ожидает, что 'matlab' будет понят, поскольку каталог MATLAB является частью переменной среды PATH.Это исключение указывает, что это не так.Это нормально, вам просто нужно явно указать местоположение вашего исполняемого файла MATLAB.Из javadoc для setMatlabLocation (...) :

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

Абсолютный путь к исполняемому файлу MATLAB можно определить, запустив MATLAB.В OS X или Linux оцените [matlabroot '/ bin / matlab'] в окне команд.В Windows оцените [matlabroot '/bin/matlab.exe'] в окне командной строки.Указанное расположение не обязательно должно быть абсолютным путем, если только операционная система может разрешить его.

Windows

Будут понятны следующие положения:

  • Текущий рабочий каталог
  • Только каталог Windows (не найдены подкаталоги)
  • Каталог Windows \ System32
  • Каталоги, перечисленные вПеременная среды PATH
  • Пути к приложениям, определенные в реестре с ключом HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Пути к приложениям

По умолчанию в Windows MATLAB помещает запись пути к приложению вреестр, так что Matlab может быть использован для запуска MATLAB.Если это свойство не установлено, будет использована эта запись Путь к приложению.

OS X

Будут понятны следующие положения:

  • Текущий рабочий каталог
  • Перечисленные каталогив переменной среды PATH

В OS X MATLAB устанавливается в / Applications / как пакет приложений.Если это свойство не установлено, будет использоваться исполняемый файл внутри пакета приложения.

Linux

Будут понятны следующие положения:

  • Текущий рабочий каталог
  • Каталоги, перечисленные впеременная среды PATH

Во время процесса установки в Linux MATLAB может создать символическую ссылку с именем matlab, которую можно использовать для запуска MATLAB.Если это свойство не установлено, будет использоваться эта символическая ссылка.

0 голосов
/ 29 июня 2015

Просто чтобы дополнить ответ, у меня была похожая проблема (я использую Intellij IDEA и Matlab R2014a).Действительно, точный путь к программе отсутствовал в переменной пути Enviromental. Некоторые пути matlab можно найти (или автоматически записать при установке matlab), например «C: \ Program Files \ MATLAB \ MATLAB Runtime \» или «C: \ Program Files\ MATLAB \ MATLAB Compiler \ ", но только тот, который содержит работу .exe, например" C: \ Program Files \ MATLAB \ R2014a \ bin ".Тем не менее, моя программа не работала, пока я не перезапустил IDE.Имейте это в виду.

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