许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  Java中调用Matlab的函数及注意事项详解

Java中调用Matlab的函数及注意事项详解

阅读数 11
点赞 0
article_banner

From:http://www.cnblogs.com/ellisonDon/archive/2012/10/30/2746457.html

一、matlab版本必须支持java

在command 模式下面运行deploytool,如果支持该命令即可使用

二、matlab中funcion的书写

%定义一个函数operation(a,b),求a与b的加减乘除运算,并返回结果

%函数定义function 输出变量列表[s,m,...] 函数名(输入变量列表)sum,sub,mul,div中

function [sum,sub,mul,div] = operation(a,b);

sum = a + b;

sub = a - b;

mul = a * b;

div = a / b;

end

PS:上面标红的部分与java中调用该operation的返回值有关系,在java中调用的 Object result[] = XXX.operation(4,a,b); 4表示有4个返回值,分别存放在result[0]到result[4]中。

三、使用matlab编译生成jar

在matlab命令窗口下输入 deploytool,就会弹出一个编译窗口,

然后点击,file,选择new-deployment project,

然后选择matlab builder jave。

name的地方填写工程名,

ocation填写该工程的存储位置。

点击ok。

然后,把m文件添加到工程中,先new一个class,这个class的名字就是你将来在java中需要new的class的名字,也就是matlab中operation所在的class名字然后将你的m文件添加到这个class目录下,然后直接build即可。

四、在java中使用matlab的函数

现在eclipse下面new一个新的java工程,然后将第三部build成功后产生的文件夹下面的distrib目录中的XXX.jar 以及你matlab安装目录下/toolbox/javabuilder/jar/javabuilder.jar加入你的java工程extend lib 中去。

然后你可以清晰的看到XXX.jar中包含的函数和类

[java] view plaincopyprint?

  1. import com.mathworks.toolbox.javabuilder.MWException;
  2. import com.mathworks.toolbox.javabuilder.MWNumericArray;
  3. import XXX.XXXX;
  4. class Test {
  5. publicstaticvoid main(String[] args) {
  6. try {
  7. XXXX abc=new XXXX();
  8. Object[] result =  null; /* Stores the result */
  9. int a=10, b=2;
  10. result=abc.operation(4, a, b );
  11. System.out.println(result[0].toString());
  12. System.out.println(result[1].toString());
  13. System.out.println(result[2].toString());
  14. System.out.println();
  15. } catch (MWException e1) {
  16. // TODO Auto-generated catch block
  17. e1.printStackTrace();
  18. } finally {
  19. /* Free native resources */
  20. System.gc();
  21. }
  22. }

如果result[0]返回的是一个数组,可以通过如下的方法解决

MWNumericArray a = new MWNumericArray(Double.valueOf(result[0].toString()),MWClassID.DOUBLE);

MWNumericArray temp = (MWNumericArray)result[0];

float [][] weights=(float[][])temp.toFloatArray();

五、可能碰到的问题

Exception in thread "main" java.lang.UnsatisfiedLinkError: Failed to find the library libmwmclmcrrt.so.7.13, required by MATLAB Builder JA, on java.library.path. This library is typically installed along with MATLAB or the MCR, its absence may indicate an issue with that installation or the current path configuration. The MCR version that this component is trying to use is: 7.13.

Failed to find the library mclmcrrt710.dll,required by MATLAB Builder JA, on java.library.path

原因是2009a要对应安装mclmcrrt7.10。在MATLAB安装目录下查找:\toolbox\compiler\deploy\win32,找到MCRInstaller.exe 安装,重启Eclipse即可。

也有可能遇到:

Exception in thread "main" java.lang.UnsatisfiedLinkError: Can't load library: d:\Program Files\MATLAB\R2009a\bin\win32\nativemcl.dll
 at java.lang.ClassLoader.loadLibrary(Unknown Source)
 at java.lang.Runtime.load0(Unknown Source)
 at java.lang.System.load(Unknown Source)
 at com.mathworks.toolbox.javabuilder.internal.MWMCR.<clinit>(MWMCR.java:1449)
 at operation.OperationMCRFactory.<clinit>(OperationMCRFactory.java:99)
 at operation.Operation.<init>(Operation.java:61)
 at JavaTestMatlab.main(JavaTestMatlab.java:18)

是说找不到nativemcl.dll文件。我的系统是64位系统,所以在bin目录下是win64文件夹。为了适应,我在bin目录下新建了一个win32文件夹,把nativemcl.dll复制到里面去。

后来报错为:

Exception in thread "main" java.lang.UnsatisfiedLinkError: https://www.gofarlic.com\Program Files\MATLAB\R2009a\bin\win32\nativemcl.dll: Can't load AMD 64-bit .dll on a IA 32-bit platform

      at java.lang.ClassLoader$NativeLibrary.load(Native Method)

      at java.lang.ClassLoader.loadLibrary0(Unknown Source)

      at java.lang.ClassLoader.loadLibrary(Unknown Source)

      at java.lang.Runtime.load0(Unknown Source)

      at java.lang.System.load(Unknown Source)

      at com.mathworks.toolbox.javabuilder.internal.MWMCR.<clinit>(MWMCR.java:1449)

      at operation.OperationMCRFactory.<clinit>(OperationMCRFactory.java:99)

      at operation.Operation.<init>(Operation.java:61)

      at JavaTestMatlab.main(JavaTestMatlab.java:18)


用eclipse做开发时,其中一个jar包需要使用jni去引用dll文件,出现这个错误


  1. Can't load AMD 64-bit .dll on a IA 32-bit platform

  2.       我的系统是win7 64位的,我发现eclipse使用的jre是32位的
         

  3.       解决办法使用jre_x64运行,把dll文件放到工程下面:
         

  4.       下载地址
         

  5.       http://www.oracle.com/technetwork/java/javase/downloads/jre-6u26-download-400751.html
         

  6.       配置:
         


      创建工程时选择jre_x64
     


      运行时:
     



      end
     


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空