簡體   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