由于课题的原因,又要搞搞java。好久没开eclipse了,觉得好陌生,尤其是当要用this的时候,你抖抖索索鬼使神差地敲了个self上去。。
啰嗦完毕,java画了个界面,核心算法是用matlab写的,所以必须调用matlab代码。网上找了些资料,似乎很少有针对matlab 2010a版本的,总结了下,方法如下:
首先请保证java已正确安装并且设置了环境变量。关于环境变量的设置,网上一堆介绍,比如http://www.233.com/ncre2/JAVA/jichu/20091220/090015124.html,这里就不再赘述。然后请保证matlab的版本支持MATLAB Builder for Java,可以在matlab的命令窗口输入deploytool,如果提示命令无效,则说明版本不支持。我原来用的7.1的就不支持,所以改装了2010a。
基本工作完成后,let's begin!
首先在matlab中新建个.m文件,随便写个算法,我们就用个简单的sum函数吧。.m文件中语句为:
function data = mysum(vec)
data = sum(vec)
将该文件保存,命名为mysum.m。
然后在matlab中菜单栏 File-->new-->Deployment Project 或者如上述在命令行输入deploytool。出现界面如下:
注意这里一定要选择Java Package。Name一项中为所生成的jar文件名称,会在后面eclipse中调用时用到,所以谨慎命名。
随后,在matlab的Deployment Tool对话框中选择Build,然后add files,将我们之前所保存的mysum.m文件添加进去。
再点击Package标签,这里注意,一定要点Add MCR,然后将默认的MCR包含进去。否则在eclipse中编译的时候找不到类库。
然后开始编译jar文件,点击Deployment Tool窗口右边的build按钮。
build完成之后,会在你之前设定的路径下生成一个文件夹,里面包含了jar文件、所有的class文件、java文件等等。
然后在eclipse中你需要调用matlab代码的工程中导入外部jar包,注意,这里还需要到matlab安装目录下找到javabuilder.jar,一同导入。(网络上有很多,不再赘述)
在你调用方法的类中import两个包,一个是javabuilder,另一个是我们自己生成的lcxTest。
//import matlab jar
import lcxTest.*;
import com.mathworks.toolbox.javabuilder.*;
相关调用示例代码如下:(部分采用了上述链接中的代码,作了适当调整)
Object[] x = null;
Object[] result = null;
lcxTest.Class1 lcx = null;
try
{
x = new Object[3];
x[0]=1;
x[1]=2;
x[2]=3;
lcx = new lcxTest.Class1();
// Compute magic square and print result
result = lcx.mysum(1,x[1]); //1表示输出一个东西
System.out.println(result[0]);
double res=((MWNumericArray)result[0]).getDouble(1);//转换成java的数据类型
System.out.println("res is: "+res);
}
catch (Exception e)
{
System.out.println("Exception: " + e.toString());
}
finally
{
// Free native resources
MWArray.disposeArray(x);
MWArray.disposeArray(result);
if (lcx != null)
lcx.dispose();
}
这样就可以成功调用matlab 2010a版本的.m文件了,说起来也不难。不过编译速度真是个问题。。另外,调用之后,原来的java风格的界面会自动变成windows风格。
end