如果我错了,请告诉我,但看起来你基本上想要拦截XBee对PacketListener.processResponse(XBeeResponse x)的调用,并让MATLAB处理传入的XBeeResponse对象的内容.我不是一个MATLAB大师,但是甚至可以使用MATLAB代码实现Java类,然后将该类传递回Java?我的猜测可能不是,但我可能是错的.
我认为你在这里遇到的问题源于这样一个事实:很容易对Java对象进行MATLAB调用,而不是相反.我要做的是使用Java代码实现PacketListener的一个非常简单的实现,然后使用像matlabcontrol这样的第三方库将Java PacketListener实现的函数调用返回给MATLAB.
我不得不在一个大型软件项目上处理这个问题,这个项目需要用Java编写的GUI来调用用MATLAB编写的后端代码,所以我可以保证matlabcontrol的功能.从Java中控制MATLAB的另一个重要资源,你应该走这条路线,是undocumentedmatlab.com.
编辑
另一件要警惕的事情是在Java方面进行线程化.您可以同时使用任意数量的Java线程进行MatLab调用,但MatLab将“顺序化”来自Java的所有调用.假设Java需要调用MatLab函数“f1”和“f2”.您设置了两个Java线程,每个线程同时调用f1或f2.在开始第二个函数调用之前,MatLab将强制一个人等待另一个完成,并且完全不确定哪一个实际上会被调用.
我说这个的原因是,无论Java Thread调用了processResponse(XBeeResponse x)函数,如果它调用MatLab并且MatLab已经忙于做其他事情,它将被阻止.最好让PacketListener缓存传入的XBeeResponse实例,这样XBee就不会等待MatLab处理数据.请记住一些事情.