本人研究课题是无人机航路规划,最近想用java调用MATLAB作三维地形图,动手一搜,果然有这方面的应用,看来不懂不会的东西要多搜索,万一前人已经碰到过并且解决了呢!
题目之所以那样写,是因为本文主要描述了java调用MATLAB的方法,言外之意就是也存在MATLAB调用java的情况,想深入研究的可参见马松辉、吴佳楠和邓红德的《MATLAB下的java图形用户界面开发》。
做联调的第一步是前提是jdk环境变量要配置成功,MATLAB安装完成!MATLAB和jdk版本要匹配,否则会出现做不出图,或者图是空白等情况。
如何安装于MATLAB版本匹配的JDK:
在MATLAB命令行窗口中输入 version -java,会显示MATLAB中预置的java虚拟机的版本,本人机器上显示如下:
所以JDK也得是1.6版本的,之前不知道走了很多弯路!
经过两三天的网上搜索,发现了很多介绍java调用MATLAB的博文,博主们图文并茂,跟着他们的说明很快就能做出图来。这里我给出我主要参考的两篇博文的地址,也算是给自己复习准备的参考资料吧!小魏的修行路 http://blog.csdn.net/xiaowei_cqu/article/details/7038819和金良山庄 http://blog.csdn.net/u012176591/article/details/43526581
以上两位博主写的非常详细,其中一位还给本人做了邮件指导!
以上两位主要讲了把MATLAB的m函数文件做出相应的jar,然后在Eclipse中调用,后来发现m脚本文件也能进行打包并调用,下面以画动态螺旋线为例,m文件源自此处,介绍一下我的操作步骤:
step one:
把以下代码保存成m脚本文件。
t=0:0.1:10*pi;
i=1;
h=plot3(sin(t(i)),cos(t(i)),t(i),'*','erasemode','none');
grid on
axis([-2 2 -2 2 0 35])
for i=2:length(t)
set(h,'xdata',sin(t(i)),'ydata',cos(t(i)),'zdata',t(i));
drawnow
pause(0.1)
end
title('动态螺旋线');
保存时以drawspiral为文件名存盘。
step two:
在MATLAB命令行中输入deploytool,调出部署工具,name被我命为SpiralDemo,Location我选与m脚本文件同文件夹,Type选择Java Package,如下图所示:
step three:
在MATLAB中编译m脚本文件。在如下图所示的界面中,1、先增加类(Add classes),2、本人命名为DrawSpiral,然后增加文件(Add classes)——把刚才的m脚本文件引入进来,3、编译
编译过程稍长,完成后会在保存m脚本文件的文件夹中发现SpiralDemo文件夹,打开该文件加,接着再打开distrib文件夹,会发现SpiralDemo.jar文件,该文件所在的路径正是待会要导入Eclipse中Build Path。
step four:
在Eclipse中建立工程TrySpiralDemo,接着往Referenced Libraries导入Build Path,一共导入两个
一个是MATLAB所带的第三方包javabuilder.jar,在本人计算机上路径为C:\Program Files\MATLAB\R2013a\toolbox\javabuilder\jar
另外一个是刚才编译生成的包,SpiralDemo.jar,在本人计算机上路径C:\Users\Liu\Desktop\spiral\SpiralDemo\distrib,下图所示:
step five:
编写java代码,作图
import com.mathworks.toolbox.javabuilder.*;
import SpiralDemo.DrawSpiral;
public class Main
{
public static void main(String[] args)
{
DrawSpiral drawspiral01 = null; //作图类对象
try
{
drawspiral01 = new DrawSpiral();
drawspiral01.drawspiral();
drawspiral01.waitForFigures();
}
catch(Exception e)
{
System.out.println("Excepiton:" + e.toString());
}
finally
{
//释放本地资源
if(drawspiral01 != null)
{
drawspiral01.dispose();
}
}
}
}
代码很简单,就是用一个作图类初始化一个作图对象,然后用该对象调用作图函数,即可得出螺旋线,注意是动态作图哦!
运行结果下图所示: