具体步骤如下:
1、在项目中添加matlabcontrol jar包;
2、在项目中新建文件夹,把需要用到的matlab代码都放到这个文件夹里;
3、获取matlab代理;
public class JavaUseMatlab {
public static void main(String[] args) throws MatlabConnectionException, MatlabInvocationException {
//MatlabProxyFactoryOptions设置matlab
MatlabProxyFactoryOptions.Builder builder = new MatlabProxyFactoryOptions.Builder();
//设置matlab GUI隐藏,Windows操作系统中 MATLAB command window还是会显示(如果想让MATLAB command window也隐藏,需要用到JNA),Linux会全部隐藏
builder.setHidden(true);
//设置使用已存在的matlab,设置这个不会运行一次matlab启动一次
builder.setUsePreviouslyControlledSession(true);
File file = new File("E:\\Java\\JavaFX\\MatlabCode");
//设置matlab启动时路径
builder.setMatlabStartingDirectory(file);
//设置获取代理的时间,这里的300000有的时候不够,改长一点就可以
builder.setProxyTimeout(300000);
MatlabProxyFactory factory = new MatlabProxyFactory(builder.build());
//获取matlab代理(用的是代理模式)
MatlabProxy proxy = factory.getProxy();
//这个有好几种方法
proxy.returningFeval("ADD", 0,1,2);//调用sumOne.m函数,传入input参数
//断开连接
proxy.disconnect();
}
}
4、proxy调用matlab的时候有好几种方法:
https://blog.csdn.net/qq_38497266/article/details/93880521
可以去上面这个网站看代理的几个方法。
或者可以去看matlabcontrol的Javadoc:
需要注意的地方:
https://ww2.mathworks.cn/help/matlab/matlab_external/handling-data-returned-from-java-methods.html
查看上面的网址看从java传入的参数,matlab是否识别,不识别需要改
例如,如果传入的参数为String类型,需要在matlab中包装一下
a = java.lang.String(传的参数);
m文件里的参数 = char(a);