一、准备
Matlab R2015b
Eclipse Kepler Service Release 2
Jdk 1.7
二、编写Matlab文件 myadd.m
% matlab实现简单的add函数供java调用
function out=myadd(n,a,b)
out=a(n)+b(n);
end
在matlab命令行输入deploytool进行打包选择library package
然后点击Package,漫长的等待(可能十分钟左右)
当编译打包完成后会在matlab目录下生成三个目录
在for_testing中选择addoperator.jar和javabuilder.jar,后者在matlab安装目录下toolbox->javabuilder->jar下
三、加入包到Eclipse工程中
将上面的两个包加入到工程中(如果涉及到图形,还需要安装MCR,并将安装后mclmcrrt.dll放入环境变量中)
写Java文件 TestAdd.java
package test;
import java.util.Scanner;
import addoperator.add;
import com.mathworks.toolbox.javabuilder.MWClassID;
import com.mathworks.toolbox.javabuilder.MWComplexity;
import com.mathworks.toolbox.javabuilder.MWException;
import com.mathworks.toolbox.javabuilder.MWNumericArray;
public class TestAdd {
public static void main(String[] args) {
MWNumericArray x=null;
MWNumericArray y=null;
Scanner in=new Scanner(System.in);
int[] dims=new int[]{1,1};
x=MWNumericArray.newInstance(dims, MWClassID.DOUBLE, MWComplexity.REAL);
y=MWNumericArray.newInstance(dims, MWClassID.DOUBLE, MWComplexity.REAL);
x.set(1, 1);
y.set(1, 2);
try {
add a=new add();
Object[] cObjects=a.myadd(1,x,y);
System.out.println(x+" + "+y+" = "+cObjects[0]);
} catch (MWException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
in.close();
MWNumericArray.disposeArray(x);
MWNumericArray.disposeArray(y);
}
}
}
四、结果
五、注意事项
1.Matlab的jdk版本和环境变量中的jdk版本要保存一致,否则在第二步无法编译
2.Matlab的位数和jdk的位数要保存一致,否则在第三步中找不到mclmcrrt.dll文件,java报错UnsupportLinkError
3.Eclipse位数和jdk位数要保存一致,否则Eclipse无法启动,因为找不到jvm.dll文件
4.Matlab不要选择R2013b,因为R2013b的mcc命令不好用,导致第二步无法编译或者破解不完全也不能使用mcc命令
5.当前Matlab的版本和MCR的版本要对应一致,否则Java报错LinkageError
之前看过一篇博客,是关于Java调用Matlab的输入输出的参数构造,感觉写的很好
详见 https://blog.csdn.net/linweidong2007/article/details/44497167