环境准备
机器上有Eclipse 和Matlab a
机器的环境变量设置
()JAVA_HOME (JDK的安装位置如C:\Program Files\Java\jdk)
设置后重启matlab才能有效
用getenv JAVA_HOME在Matlab的命令窗口中试验看看得到的返回值正确方可说明其对Matlab生效了
()Classpath
添加matlabInstallRoot \toolbox\javabuilder\jar\javabuilderjar
()Path
添加%JAVA_HOME%/bin/javac
将matlab的m文件生成为jar
在matlab的command窗口输入deploytool会在右侧弹出一个新窗口(Deployment Tool)
在Deployment Tool中点击new按钮选择Matlab Builder for Java与Java Package新建一个工程名字如flyingprj
确保在Deployment Tool面板中的Generate Verbose Output被勾上了
将欲被java调用的m文件(如mydrawm其中包括两个参数(xy))从Matlab整个界面的左侧工作目录面板拖拽到Deployment Tool中的新建的类下面的class 文件夹下
点击build按钮则会在matlab的当前目录下生成以一个与工程同名的文件夹如果build成功会看到文件夹结构如下
Flying |distrib
| |flyingjar
| |flyingctf
|
|src
| |flying
| |flyingclassjava
| |flyingMCRjava
| |classes
| |flying
| |flyingclassclass
| | flyingMCRclass
|buildlog
|flyingctf
|flyingjar
|mccExcludedFileslog
|readmetxt
编写java方法准备调用刚刚生成好的flyingjar中的Matlab函数
在java工程属性的BuildPath中添加两个jar包
matlabroot\toolbox\javabuilder\jar\javabuilderjar
TestDirectory\flyingjar
编写函数示例如下
package test;
/**
* test for a Matlab Call
*
*/
import commathworkstoolboxjavabuilder*;
import flying*;
public class testMatlabClass {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Autogenerated method stub
try {
Systemoutprintln(Begin)
flyingclass flyingDraw=new flyingclass()
Systemoutprintln(Middle)
flyingDrawmydraw()
Systemoutprintln(Here)
}catch (Exception e){Systemoutprintln(e)}
}
}
如果不能正常运行可以考虑在 classpath 中加入 flyingjar 所在的位置
详 细
参见 matlab 的帮助文件
数据类型相关
Java 的数值型数组可以直接作为输入参数传递到 m 文件上
如mydraw(xy) 可以画x=[ ] y=[ ]这样的线图Java调用该方法时候如果传递的参数是整型或者实数型数组则直接可成功如java中
int[] a = new int[];
int[] b = new int[];
// 给 ab 赋值 …
// …
// 调用
flyingclass flyingDraw = new flyingclass()
flyingDrawmydraw(ab)
注意ab 最好所有有索引的位置都有值否则如果没有充分赋值曲线可能会最终折回()点
Matlab程序(m文件)的修改
找到TestDirectory\flyingjar所在的位置(因为按照上述步骤的话m源文件就在该位置附近)这个位置从Eclipse的Package Explore可以用看到
直接修改欲改动的m文件
打开Matlab 在Command输入Deploytool 在新打开的部署面板中打开该m文件所在的工程如flyingprj
选中相应工程下Class 文件夹下的m文件点击工具栏的Build按钮
则相应源文件被重新编译如果按照前面步骤添加的jar包则编译后新生成的jar包自动替换掉原有的jar又由于这个jar的位置已经作为BuildPath告诉了java的相应工程因此Java端不需要做任何调整即可正确调用到新修改了内容的matlab方法