从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 …