java和matlab混合编程 java调用.jar包中方法时参数传递问题

时间:2021-10-15 21:24:58
毕设涉及到了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中。
java和matlab混合编程 java调用.jar包中方法时参数传递问题
在项目中添加类: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();

}

}

}
经运行测试:结果正常
java和matlab混合编程 java调用.jar包中方法时参数传递问题
----------------------------------------------------------------------------------------------------------------------------------------------------------
2.测试结束后用同样的方法做我的程序:

m文件:bwtraceboundary_proc4.m [matlab2012a环境下面运行无误]

bwtraceboundary_proc4.m 内容:
http://blog.csdn.net/baiding1123/article/details/26608343
按照上面的方法打包,添加到MyEclipse项目中的build path中。

java和matlab混合编程 java调用.jar包中方法时参数传递问题
实现的类:

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);


}
}
}
调用该方法的时候系统提示:
java和matlab混合编程 java调用.jar包中方法时参数传递问题
我要填的两个参数为(图片的路径,最大点数)
为什么会成为(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)


不了解它的原理,麻烦会这方面的大哥大姐帮帮忙,谢谢!!!




7 个解决方案

#1


没人帮忙  啊啊    急 。。。

#2


好像 matlab 用的挺多的。

#3


问题已经解决,结贴了。

#4


楼主您好,请问The method bwtraceboundary_proc4(int, Object[]) in the type BwtraceBoundary_Pro is not applicable for the arguments (int, String, MWNumericArray)问题是怎样解决的?

#5


问题怎么解决的,求指教

#6


问题怎么解决的,求教

#7


最讨厌的是什么呢?最讨厌的是楼主自己解决问题后就说一句“以解决”。然后没有下文了。考虑一下搜到这个问题的其他不知道如何解决的人的感受好嘛。。。

#1


没人帮忙  啊啊    急 。。。

#2


好像 matlab 用的挺多的。

#3


问题已经解决,结贴了。

#4


楼主您好,请问The method bwtraceboundary_proc4(int, Object[]) in the type BwtraceBoundary_Pro is not applicable for the arguments (int, String, MWNumericArray)问题是怎样解决的?

#5


问题怎么解决的,求指教

#6


问题怎么解决的,求教

#7


最讨厌的是什么呢?最讨厌的是楼主自己解决问题后就说一句“以解决”。然后没有下文了。考虑一下搜到这个问题的其他不知道如何解决的人的感受好嘛。。。