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

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

谢谢你,雅各布

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

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

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

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

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

Yair Altman

matlabcontrol是一个Java API,允许您这样做。 它可以使用feval调用MATLAB函数。 它不能直接在函数句柄上操作,但如KitsuneYMG所述,您可以使用func2str将函数句柄转换为字符串。 首先,您可以查看演练 。

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

另请参见:FEVAL FUNC2STR

试试这个工具: http : //jamal.sourceforge.net/

它完全符合您的需求并且有详细记录。

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