Matlab编程简单且拥有强大的计算能力,但是其对于某些场景并不适应,常常需要借助于java代码。Matlab调用java代码首先需要两个步骤:1.将java代码打包成jar包;2.matlab调用。(注意:有一个很重要的前提,matlab的java版本要和安装的java版本一致)
1. 使用intellij IDEA编译器将java代码打包成jar包(本人的是intellij 16.3)
(1) File—>Projectstructure->Artifacts
点击“+”,选择“Jar”,选择Empty或From moduleswith dependencies,一般会使用后者,后者会把在项目中用到的Jar包解压开,当成项目的一部分,打包到最后的Jar包中。但是这样会有一个问题,即,如果项目中引用的Jar包有签名过,最后打包成的Jar包运行时会抛出错误:
“java.lang.SecurityException:Invalid signature file digest for Manifest main attributes”
因此,也可以可以选择Empty,然后在“OutputLayout”中,把自己要打包的文件、文件夹添加进去。对于外部引用的包,笔者全部放在src目录下,因此,在Class Path中,把依赖的jar包添加进去,例如:src/commons-lang3-3.5.jar
src/log4j-1.2.15.jar src/ json-lib-2.4-jdk15.jar
设置好Main Class,这就不用多说了。
点击OK。
回到IDEA,选择Build-> Build Artifacts,成功生成Jar包。生成的Jar包位于上图设置的Output directory。
使用命令java -jar xxxxx.jar来执行jar包。
2. matlab调用生成的jar包
(1) 第一步:定位Matlab中Java环境的ext目录
在matlab命令窗口输入disp(java.lang.System.getProperty('java.ext.dirs'));
查询到自己安装的matlab的java环境的ext目录。
(也可以在matlab的窗口输入:edit classpath.txt,然后将你的jar路径填写进去,但是本人没有试过。感兴趣的可以试一下)
第二步:将需要的java文件打包放入到ext目录中(网上教程说会输出两个目录,但是本人就出现一个,直接就是安装目录下的ext目录。)
第三步:重启matlab
第四步:测试程序
本人java项目的包名是:com.company
主函数是BaiduAPI
要调用的函数名为:geo(string a , string b)
那么调用的时候直接为:
A=com.company.BaiduAPI;
C = A.geo(a,b);
注意:1.当出现类似下图字样的时候:
需要注意你的包名和主函数的名字是否为这个,或者是不是把打好的jar包导入到相应目录下;
2.当出现以下错误的时候:
需要注意:(1)你的有参函数里面的参数类型
(2)在matlab中字符串的表示和java中有所不同;
到目前为止就大功告成了。希望对大家有用!