Дайте мне знать, если я ошибаюсь, но похоже, что вы в основном хотите перехватить вызовы XBee на PacketListener.processResponse(XBeeResponse x)
и заставить MATLAB обработать содержимое входящего XBeeResponse
объекта.Я не большой гуру MATLAB, но возможно ли вообще реализовать класс Java с использованием кода MATLAB, а затем передать этот класс обратно в Java?Я думаю, что, вероятно, нет, но я могу ошибаться.
Я думаю, что проблема, с которой вы здесь работаете, связана с тем, что легко выполнять вызовы MATLAB для объектов Java, но не наоборот.Что бы я сделал, это сделал бы действительно простую реализацию PacketListener
с использованием Java-кода, а затем использовал стороннюю библиотеку, такую как matlabcontrol , чтобы сделать вызовы функций из вашей реализации Java PacketListener обратно в MATLAB.
Мне приходилось сталкиваться с этой проблемой в большом программном проекте, для которого требовался графический интерфейс, написанный на Java, для выполнения вызовов внутреннего кода, написанного на MATLAB, поэтому я могу поручиться за возможности matlabcontrol.Еще один важный ресурс при управлении MATLAB из Java, если вы идете по этому пути, это undocumentedmatlab.com .
РЕДАКТИРОВАТЬ
Еще одна вещь дляБудьте осторожны с потоками на стороне Java.Вы можете иметь любое количество потоков Java, выполняющих вызовы MatLab одновременно, но MatLab будет «секвенировать» все вызовы из Java.Допустим, Java должна вызывать функции MatLab "f1" и "f2".Вы устанавливаете два потока Java, каждый из которых вызывает либо f1, либо f2 одновременно.MatLab заставит одного ждать завершения другого, прежде чем начать второй вызов функции, и он совершенно не определяет, какой из них будет вызван первым.
Причина, по которой я это говорю, заключается в том, что бы ни вызывал поток Javaфункция processResponse(XBeeResponse x)
будет заблокирована, если она вызовет MatLab, а MatLab уже занят чем-то другим.Лучше всего, чтобы ваш PacketListener кэшировал входящие экземпляры XBeeResponse, чтобы XBee не застревал в ожидании, пока MatLab обработает данные.Просто что-то иметь в виду.