从Java调用matlab回调/函数句柄

时间:2009-06-17 08:49:56

标签: java matlab callback function-handle

如何将matlab函数句柄传递给Java对象并从Java中调用它(也就是说,我希望Java在准备好计算时告诉matlab)。我正在尝试使用com.mathworks.jmi.Matlab类来评估Java对象中的Matlab表达式,但我看不出如何1)将回调funcktion句柄传递给Java,以及2)从Java调用它可能使用com.mathworks.jmi.Matlab类。

谢谢, 雅各布

5 个答案:

答案 0 :(得分:2)

嗯。看起来JMI是matlab内部事物之一,可能会在未来版本中发生变化。我发现这些在线文章,不确定它们是否对您的案例有帮助。

答案 1 :(得分:1)

我担心我不知道如何做完全你所要求的,但有两种方法可以做类似的事情:

1)如果从Matlab中设置Java回调,可以向它发送一个Matlab函数句柄。当引发Java回调事件时,将调用您的Matlab函数。可以在此处找到一个示例:http://UndocumentedMatlab.com/blog/uicontrol-callbacks/。请注意,这不需要运行JMI。

2)JMI需要一个字符串(函数名或命令行)供Matlab评估。如果您事先知道功能名称,则可以使用它。否则,您可以准备一个Matlab切换码功能(其名称已提前知道),以动态地将您的回调引导到相应的Matlab操作。

我计划在4月中旬在http://UndocumentedMatlab.com网站上发布一篇关于JMI的文章,敬请期待...

Yair Altman

答案 2 :(得分:1)

matlabcontrol是一个Java API,允许您这样做。它可以使用feval调用MATLAB函数。它不能直接在函数句柄上运行,但如KitsuneYMG所述,您可以使用func2str将函数句柄转换为字符串。要开始使用,您可以查看walkthrough

答案 3 :(得分:0)

要将回调传递给matlab,您将matlab函数的名称及其参数传递给com.mathworks.jmi.Matlab.feval(“matlabControlcb”,...,0); ......是一个Object [],其中[0] =命令,[1..end] =参数。

参见:FEVAL FUNC2STR

答案 4 :(得分:0)

尝试此工具:http://jamal.sourceforge.net/

它完全符合您的需求并且记录良好。

它的基本原理是对在Matlab中运行的服务器部分进行RMI调用。输出返回到java程序。再次,这取决于jmi ......