从Matlab调用“main”Java方法并等待完成

问题描述:

我有一个具有“main()”方法的Java类matlabSMAC。从Matlab调用“main”Java方法并等待完成

我想从Matlab调用这个方法。但是,每当我这样做时,matlab脚本会继续执行,并不会等待main()方法来完成执行。

我曾尝试调用的方法在几个方面,遗憾的是相同的结果

matlabSMAC.main(args) 
javaMethod('main','matlabSMAC',args) 
javaMethodMT('main','matlabSMAC',args) 

问: 有没有办法迫使MATLAB等待方法的执行做在退出/完成/继续执行脚本之前?

在文档的下一页末尾有一个小小的评论。然而,它并不指向任何解决方案:

https://de.mathworks.com/help/matlab/matlab_external/invoking-methods-on-java-objects.html

谢谢!

也许你可以在matlab中使用函数waitfor

waitfor在对象被删除或关闭之前停止执行matlab脚本。但在此之前,您必须创建一个引用您的Java主函数的对象。

+0

这听起来像个好主意。但它只适用于MATLAB对象。你知道自定义Java对象是否有其他选择吗? –

+0

另一种使用方法的方法是制作一个可执行版本的方法,并通过[dos(java“yourProgram”](https://nl.mathworks.com/help/matlab/ref/dos.html?searchHighlight = dos&s_tid = doc_srchtitle)。dos()也会返回退出状态。你可以使用退出状态来查看你是否想在matlab脚本中进行前向处理。 – hsuyaa

+0

我也试过java.lang.runtime.getruntime ().exec(...),然后检查InputStream,直到输出为空....未成功。 我试图在计算群集中运行此操作。每当我在交互式会话中运行它时,完美地,但是在批处理模式下运行是造成麻烦的原因,并且让我在这里只是挠挠头脑。 –

在继续之前,Matlab会等待调用的Java方法完成。

您可能会看到那个main方法启动其他线程然后返回的效果。 (这是任何Java GUI程序的正常设计。)

你的main()做什么?您可能需要matlabSMAC类来提供另一种方法,该方法会阻止其所有工作线程和/或进程完成。