繁体   English   中英

在MATLAB中实现Java接口

[英]Implementing Java interface in MATLAB

我正在尝试编写一个MATLAB GUI,它使用XBee-API接口与Arduino上的XBee无线电进行通信。 GUI主要进行数据收集和解析传入的数据包。

我想按开发人员指南定义执行addPacketListener (请参阅“接收数据包”一节)以等待数据包处理。 在Java中,这是如何完成的:

xbee.addPacketListener(new PacketListener() {
    public void processResponse(XBeeResponse response) {
        // handle the response
    }
});

在MATLAB中,我会做一个addlistener()并设置它的回调来进行处理。

我对Java知之甚少,所以我想知道是否可以在MATLAB中设置processResponse代码:我可以做如下的事情:

function processResponse
    #% do response here
end 

>> xbee.addPacketListener(@processResponse)

我不确定这是否完全合理; 基本上我想要完成的是一旦新的数据包可用于我的XBee(在Java中由addPacketListener处理)就执行回调。

如果我错了,请告诉我,但看起来你基本上想要拦截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处理数据。 请记住一些事情。

要将MATLAB与Java接口,请遵循将Java类和方法引入MATLAB Workspace中的接口要求。

最糟糕的是将Java jar类的路径添加到javaclass路径,然后调用构造函数,方法等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM