java调用matlab函数
如何将实验结果在matlab中可视化呢,下面使用java语言编程,调用matlab中的函数:
本人安装的是Matlab7.11.0 (R2010a)和 Eclipse 4.2 ;
1)首先设置环境变量,运行tomcat,Eclipse等都需要依靠环境变量JAVA_HOME,Path,classpath,具体的设置可以参考这里
为了使在matlab中将.m函数编译为jar包,还需要在classpath中添加:
%matlabInstallRoot%\R2010a\toolbox\javabuilder\jar\javabuilder.jar(具体依据matlab版本而定版本)
2)将Matlab的m文件编译成jar包
这里我们使用Matlab自带的例子,在路径
%matlabInstallRoot%\R2010a\toolbox\javabuilder\Examples\PlotExample
下,此处是m文件:
function drawplot(x, y)
plot(x, y); %%使用matlab函数plot()作图
在MATLAB中Command窗口中输入deploytool调出部署工具DeploymentTool。新建一个工程,输入工程名Demo.prj,选择路径,并选择Target为 Java Package。
在MATLAB右侧会出现我们新建的工程。
将刚刚编写的m文件直接拖拽进去,并重命名类名为plotter,点击Build编译:
点击编译后(过程有点长~),看到build finished。就会刚刚设置的路径下看到Demo的文件夹。
3)在java工程中调用matlab生成的类
新建工程TryMatlabPlot,并右键在Build Path中引用相关的包
%matlabInstallRoot%\R2010b\toolbox\javabuilder\jar\jarbuilder.jar
以及刚刚生成的plotdemo\distrib\plotdemo.jar
期间遇到的问题
【1】用matlab画图(一个工业项目),然后利用java调用,jar包什么的已经打完了,但是程序不报错,只是图像不显示。类似帖子提问
解答:java调用显示不出图的 可能是因为jdk版本问题
jdk1.7的好像显示不了。用jdk1.6的就可以了
【2】使用jdk1.6后报错,类似帖子:
Exception in thread "main" java.lang.UnsatisfiedLinkError: Failed to find the library mclmcrrt713.dll, required by MATLAB Builder JA, on java.library.path. This library is typically installed along with MATLAB or the MCR, its absence may indicate an issue with that installation or the current path configuration. The MCR version that this component is trying to use is: 7.13.
解答:copy个mclmcrrt713.dll过来放到c:/windows/system32下面
MATLAB Compiler™ 能够将您的 MATLAB® 程序编译为独立的应用程序,或可与其它通用编程语言集成的共享库。通过安装MATLAB Compiler Runtime,没有 MATLAB 的用户也可以使用 MATLAB Compiler 创建的应用程序和库,而无需支付版税。您既可以将 MATLAB Compiler Runtime 与应用程序打包到一起,也可以让您的用户在安装过程中进行下载【MCR下载地址】。
今天有同学遇到这个问题,上网查了一下好像是因为你的matlab所运行的java虚拟机和你程序的java虚拟机,一个是64位,一个是32位,或者版本不同导致的。matlab输入version -java看一下java版本,然后如果是64位的就去下一个安装。我是用eclipse给你提供个eclipse 的修改方法,去你eclipse点window=>preferences=>installed JREs=>add,将新安装的加进去,然后去你的项目右键=>properties=>java build path=>libraries把之前的jre删了,然后点add librariy=>JRE system library=>alternate JRE,选你刚装的jre,finishing,ok,完成,运行吧,少年,祝好运【参考】
matlab2010Ra的java虚拟机版本是jdk1.6.0_12