许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  Java中调用Matlab程序及相关问题解决

Java中调用Matlab程序及相关问题解决

阅读数 4
点赞 0
article_banner

**在java中调用matlab程序,首先要将matlab程序打包成jar文件,才可以被java程序所调用。

打包时本人所用的各种工具:

1:myeclipse-bule

2:java-1.7

3:matlab R2011b(有java packet即java打包环境)


检查打包环境

1:在DOS窗口(cmd调用)中输入java -version或javac -version检查jdk版本


2:在matlab的控制窗口中输入version -java检查matlab所需的最低jdk版本

matlab中检查jdk版本

检查打包环境的作用:

保证java的运行坏境和matlab程序打包时的环境一样,避免出现很多杂乱的问题。由于之前我用的是jdk1.8,但是另一台电脑上用的是jdk1.7,当从1.7的那台电脑上拷过来的jar包放到我的1.8的电脑上运行时,就会出现各种小问题(因为问题太多,所以当时也没有留心copy问题,只想着解决方案了),所以建议在打包之前一定先检查环境的配置。


开始将matlab程序转换为jar包

1:编写matlab程序(.m文件),保存


function [ sum,sub,mul,div ] = calc( a,b )
sum=a+b;
sub=a-b;
mul=a*b;
div=a/b;
end
function


2:在matlab命令窗口中输入deploytool,调出deployment project工具,新建java packet项目


deployment project

3:在build中修改class(类名)名称,并加入源文件。之后进行编译。

build

4:打包完成

finish

5:打包完成之后的目录结构

FileStructure


在MyEclipse中开始测试jar包

1:在java项目下的lib文件夹中导入calculate.jar包(即我们之前所打包的jar包)和javabuilder.jar(在E:\Matlab\toolbox\javabuilder\jar文件目录下)包。

structure

2:新建测试类JiSuan,源码如下


/** * JiSuan.java [V 1.0.0] *classes:com.JiSuan *Create at: 2015年8月12日下午10:20:04 */package com; import java.util.Scanner; import com.mathworks.toolbox.javabuilder.MWException; import calculate.CalcTest;import calculate.CalcTestRemote; /** * com.JiSuan *  * @author xiangdong Create at:2015年8月12日.下午10:20:04 */public class JiSuan {	public static void main(String[] args) throws MWException {		Object result[] = null;		CalcTest calc = null;		int m, n;		calc = new CalcTest(); 		System.out.println("从键盘输入两个操作数:");		System.out.print("输入第一个操作数:");		Scanner scan = new Scanner(System.in);		m = scan.nextInt();		System.out.print("输入第二个操作数: ");		n = scan.nextInt(); 		result = calc.calc(4, m, m);		System.out.print("The sum of " + Integer.toString(m) + " and "				+ Integer.toString(n) + " is: ");		System.out.println(result[0]);		System.out.print("The sub of " + Integer.toString(m) + " and "				+ Integer.toString(n) + " is: ");		System.out.println(result[1]);		System.out.print("The mul of " + Integer.toString(m) + " and "				+ Integer.toString(n) + " is: ");		System.out.println(result[2]);		System.out.print("The div of " + Integer.toString(m) + " and "				+ Integer.toString(n) + " is: ");		System.out.println(result[3]);	} }3:运行测试


result



   其中所遇到的问题及解决方法:

一:


Exception in thread "main" java.lang.UnsatisfiedLinkError: Failed to find the required library mclmcrrt8_5.dll 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: 8.5. 	at com.mathworks.toolbox.javabuilder.internal.MCRConfiguration$ProxyLibraryDir.get(MCRConfiguration.java:259)	at com.mathworks.toolbox.javabuilder.internal.MCRConfiguration$ProxyLibraryDir.<clinit>(MCRConfiguration.java:265)	at com.mathworks.toolbox.javabuilder.internal.MCRConfiguration.getProxyLibraryDir(MCRConfiguration.java:270)	at com.mathworks.toolbox.javabuilder.internal.MCRConfiguration$MCRRoot.get(MCRConfiguration.java:71)	at com.mathworks.toolbox.javabuilder.internal.MCRConfiguration$MCRRoot.<clinit>(MCRConfiguration.java:81)	at com.mathworks.toolbox.javabuilder.internal.MCRConfiguration.getMCRRoot(MCRConfiguration.java:86)	at com.mathworks.toolbox.javabuilder.internal.MCRConfiguration$ModuleDir.<clinit>(MCRConfiguration.java:60)	at com.mathworks.toolbox.javabuilder.internal.MCRConfiguration.getModuleDir(MCRConfiguration.java:65)	at com.mathworks.toolbox.javabuilder.internal.MWMCR.<clinit>(MWMCR.java:1503)	at Untitled1.Untitled1MCRFactory.newInstance(Untitled1MCRFactory.java:48)	at Untitled1.Untitled1MCRFactory.newInstance(Untitled1MCRFactory.java:59)	at Untitled1.Class1.<init>(Class1.java:62)	at com.PlotTest.main(PlotTest.java:19)分析:1.因为之前一直用的是jdk1.8,所以产生这种问题可能可jdk的版本有关。 
  


2.因为程序中要调用到matlab的图形界面,所以需要加入 mclmcrrt*.dll(*代表版本的不同,每个不同的matlab都有不同.dll文件),所以检查自己的.dll文件和自己版本的matlab中的是否一样

3.加入mclmcrrt*.dll时的路径是否正确??

4.mclmcrrt*.dll是32位还是64位,应与操作 系统 和jdk版本都一致,最好保证所有的都和操作系统位数一样。不然真的会出很多幺蛾子。


二:

{Error using plotcos1 (line 5)Not enough input arguments.} Exception in thread "main" ... Matlab M-code Stack Trace ...file C:\Users\XIANGD~1\AppData\Local\Temp\xiangdong she\mcrCache7.16\Untitl0\Matlab\matlab\yuanma\plotcos1.m, name plotcos1, line 5.com.mathworks.toolbox.javabuilder.MWException: Error using plotcos1 (line 5)Not enough input arguments.	at com.mathworks.toolbox.javabuilder.internal.MWMCR.mclFeval(Native Method)	at com.mathworks.toolbox.javabuilder.internal.MWMCR.access$600(MWMCR.java:23)	at com.mathworks.toolbox.javabuilder.internal.MWMCR$6.mclFeval(MWMCR.java:833)	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)	at java.lang.reflect.Method.invoke(Method.java:606)	at com.mathworks.toolbox.javabuilder.internal.MWMCR$5.invoke(MWMCR.java:731)	at com.sun.proxy.$Proxy0.mclFeval(Unknown Source)	at com.mathworks.toolbox.javabuilder.internal.MWMCR.invoke(MWMCR.java:406)	at Untitled1.Class1.plotcos1(Class1.java:214)	at com.PlotTest.main(PlotTest.java:20)


问题分析:

1:根据大括号中的错误提示,发现是输入的参数不够,所以检查在调用函数时候的参数是否正确,参数的个数是否满足,参数的 类  型是否正确


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


相关文章
技术文档
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
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空