6

Вопрос по matlab, callback, java – Вызов обратного вызова / дескриптора функции Matlab из Java

Как передать дескриптор функции matlab объекту Java и вызвать его изнутри Java (то есть я хочу, чтобы Java сообщила matlab, когда он будет готов к вычислению). Я пытаюсь использовать класс com.mathworks.jmi.Matlab для оценки выражений Matlab в объекте Java, но я не могу понять, как 1) передать дескриптор функции обратного вызова в Java и 2) вызвать его из Java, возможно, используя класс com.mathworks.jmi.Matlab.

Спасибо, Jakob

5 ответов
  • 1

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

  • 1

    Я боюсь, что не знаю, как это сделать.

    exactly что вы просили, но есть два способа сделать что-то подобное:

    1) Если вы установите обратный вызов Java из Matlab, вы можете отправить ему дескриптор функции Matlab. Когда событие обратного вызова Java возникает, ваша функция Matlab будет вызвана. Пример этого можно найти здесь:http://UndocumentedMatlab.com/blog/uicontrol-callbacks/, Обратите внимание, что для этого не требуется JMI.

    2) JMI нужна строка (имя функции или командная строка) для оценки Matlab. Если вы заранее знаете название функции, вы можете использовать ее. В противном случае вы можете подготовить функцию коммутатора Matlab (имя которой известно заранее), чтобы динамически направлять ваш обратный вызов на соответствующее действие Matlab.

    Я планирую опубликовать статью о JMI вhttp://UndocumentedMatlab.com сайт в середине апреля, так что следите за обновлениями ...

    Яир Альтман

  • 0

    попробуйте этот инструмент:

    http://jamal.sourceforge.net/

    Он делает именно то, что вам нужно и хорошо документировано.

    Основным принципом, на котором он основан, является вызов RMI к серверной части, которая выполняется внутри Matlab. Вывод возвращается в программу Java. Опять же, это зависит от JMI ...

  • 2

    Хм. Похоже

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

    http://www.mathworks.com/matlabcentral/newsreader/view_thread/239803 http://www.mathworks.co.uk/matlabcentral/newsreader/view_thread/250598 http://www.cs.virginia.edu/~whitehouse/matlab/JavaMatlab.html

  • 0

    Чтобы передать обратный вызов в matlab

    вы передаете имя функции matlab и ее аргументы в com.mathworks.jmi.Matlab.feval (& quot; matlabControlcb & quot ;, ..., 0); ... является объектом [], где [0] = команда и [1..end] = аргументы.

    Смотрите также: FEVAL FUNC2STR