毕设涉及到了Java和matlab的混合编程,配置好了本机的环境,参照网上的方法实现了一个小例子:
matlab
1.编写:myadd.m
----------------------------------------------------
function y = myadd(a,b)
y = a+b;
end
----------------------------------------------------
用deploytool编译为生成myadd.prj,将工程中的myadd.jar包拷贝到Myeclipse建的项目文件中,并加入项目的build path中,再将javabuilder.jar添加到项目的build path中。

在项目中添加类:MJNuilderTest
导入相关包后的这个类文件:
package com.matlab.test;
import java.util.Scanner;
import myadd.Myfun;
import com.mathworks.toolbox.javabuilder.MWArray;
import com.mathworks.toolbox.javabuilder.MWClassID;
import com.mathworks.toolbox.javabuilder.MWNumericArray;
public class MJBuilderTest {
/**
* @param args
*/
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
MWNumericArray a = null;
MWNumericArray b = null;
Object[]result = null;
Myfun myadd = null;
String[] args1;
Scanner scanner= new Scanner(System.in);
System.out.println("请输入两个数:A,B\n");
args1 = scanner.nextLine().split(",");
try{
if(args1.length != 2){
System.out.println("error:must input two numbers!");
return;
}
//把值先变成matlab能理解的double类型
a = new MWNumericArray(Double.valueOf(args1[0]),MWClassID.DOUBLE);
b = new MWNumericArray(Double.valueOf(args1[1]),MWClassID.DOUBLE);
myadd = new Myfun();
//计算输出结果
result = myadd.myadd(1, a,b);
System.out.println("\nThe summ of "+a.toString()+" and "+b.toString()+" is:\n");
System.out.println(result[0]);
}catch (Exception e) {
// TODO: handle exception
System.out.println("Exception! "+e.toString());
}finally{
//free native resoures
MWArray.disposeArray(a);
MWArray.disposeArray(b);
MWArray.disposeArray(result);
if(myadd != null)
myadd.dispose();
}
}
}
经运行测试:结果正常

----------------------------------------------------------------------------------------------------------------------------------------------------------
2.测试结束后用同样的方法做我的程序:
m文件:bwtraceboundary_proc4.m [matlab2012a环境下面运行无误]
bwtraceboundary_proc4.m 内容:
http://blog.csdn.net/baiding1123/article/details/26608343
按照上面的方法打包,添加到MyEclipse项目中的build path中。

实现的类:
package com.matlab.test;
import java.util.Scanner;
import BwtraceBoundary.*;
import com.mathworks.toolbox.javabuilder.*;
import com.sun.xml.internal.bind.v2.runtime.Name;
public class MyTracetest {
public static void main(String[] args)throws Exception{
// TODO Auto-generated method stub
Object[] resultObjects = null;//保存结果
MWNumericArray posnum = null;// 参数a
int num = 9600;
try {
BwtraceBoundary_Pro btProc4 = new BwtraceBoundary_Pro();
posnum = new MWNumericArray(num,MWClassID.INT16);
String filename = new String("d:/deep.jpg");
//出错部分: 调用这个方法的时候参数究竟该怎么填??
resultObjects = btProc4.bwtraceboundary_proc4(1,filename,posnum);
} catch (Exception e) {
// TODO: handle exception
System.out.println("Exceptin: "+e.toString());
}finally{
MWArray.disposeArray(resultObjects);
MWArray.disposeArray(posnum);
}
}
}
调用该方法的时候系统提示:

我要填的两个参数为(图片的路径,最大点数)
为什么会成为(int,Objects[])?
报错信息:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method bwtraceboundary_proc4(int, Object[]) in the type BwtraceBoundary_Pro is not applicable for the arguments (int, String, MWNumericArray)
at com.matlab.test.MyTracetest.main(MyTracetest.java:21)
不了解它的原理,麻烦会这方面的大哥大姐帮帮忙,谢谢!!!