**在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版本

检查打包环境的作用:

保证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

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

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

4:打包完成

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

在MyEclipse中开始测试jar包

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

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:运行测试

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

一:

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

java中调用matlab程序及相关问题相关推荐

  1. 在JAVA中调用MATLAB程序

    概述 先简单的介绍一下数据分析(百度百科:数据分析)与数据挖掘(百度百科:数据挖掘). 数据分析:使用适当的统计方法对收集来的大量数据进行分析,为了提取有用信息和形成结论而对数据加以详细研究和概括总结 ...

  2. java和matlab的交互实践--在java项目中调用matlab程序

    本文主要解决了java项目中调用matlab程序过程中遇到的问题,下文主要分matlab的jar包部署以及java项目配置两个方面来分析. 1.matlab项目的部署 -- 生成jar包 保存matl ...

  3. java 中调用 Matlab 的函数

    一.matlab版本必须支持java 在command 模式下面运行deploytool,如果支持该命令即可使用 二.matlab中function的书写 %定义一个函数operation(a,b), ...

  4. 一文实现:在python中调用matlab程序,保姆级安装windows环境下的matlab.engine教程

    一.前言   我最近在做一个基于图像融合的目标检测工程,我经常用matlab去研究和创新新型的图像融合算法,因为matlab有着python所不可比拟的数据可视化功能和大量的滤波分解框架包:在目标检测 ...

  5. java能调用python吗_如何使用运行时在Java中调用python程序 - java

    我想用来自Java的参数调用python程序.但是我的输出是空白.代码在这里. Python代码在这里: import sys print(sys.argv[1]) Java代码在这里: public ...

  6. 【Matlab】在Java中调用matlab函数

    考虑到计算的各种情况,有些用Java代码实现的计算难免会显得不够高效.而利用MATLAB写好相应的计算函数,然后打包成jar包供Java调用,在某些情况下会更加方便.现在就来说一下如何实现这一过程: ...

  7. Java中使用MATLAB作图

    最近做一个项目,需要很多进行很多信号处理--小魏就是学软件的,对信号处理简直是个小白,最简单的实现就是傻瓜似的调用MATLAB的各种工具箱,达到目的就行. 同时,MATLAB是种解释性语言,执行效率比 ...

  8. 【Matlab】Java中使用MATLAB作图

    最近做一个项目,需要很多进行很多信号处理--小魏就是学软件的,对信号处理简直是个小白,最简单的实现就是傻瓜似的调用MATLAB的各种工具箱,达到目的就行. 同时,MATLAB是种解释性语言,执行效率比 ...

  9. java中调用python

    在Java中调用Python </h1><div class="clear"></div><div class="postBod ...

最新文章

  1. 编译器设计-代码生成
  2. Toad Oracle 本地/远程数据库导入/导出 数据库备份
  3. 写入指定长度的字节到文件
  4. HttpReports 2.0 发布了 !!!
  5. 遭央视曝光的“AI算命”,背后竟然隐藏了一个价值千亿的市场!?
  6. 爬虫教程( 4 ) --- 分布式爬虫 scrapy-redis、集群
  7. 推荐系统相关科技论文写作建议
  8. abstract的子类的错误表达JAVA_如果子类没有覆盖Java中的抽象方法,会发生什么?...
  9. python全栈和java全栈_Python是全栈式开发语言吗?原因竟是这样!
  10. 东哥再见!我打算 6 月份离职
  11. 科大讯飞:讯飞输入法日语音交互次数超10亿,将发力5G和AIoT领域
  12. php 转换中文乱码,解决php中文乱码转换问题
  13. cordic ip核 vivado_Xilinx Vivado Cordic 核的使用
  14. 5G技术详解系列-PDU会话签约数据(6)
  15. python获取股票_python根据股票代码获取当前数据
  16. 浅谈深度学习:了解RNN和构建并预测
  17. 神经复杂系统前沿:关于认知大脑的两种观念
  18. 选中exchange缓存模式后 GAL不会更新
  19. docker容器安装配置及创建容器
  20. [RK3288][Android6.0] Audio录音frame rate设置流程小结

热门文章

  1. DRP系统(组织决定的存留策略)
  2. 小米AX3600路由器扩容刷OpenWrt后,如何刷回官方系统和分区
  3. python 的emulate函数封装_用模拟执行实现Objective-C代码自动化分析
  4. 2020.9.8小米测试开发工程师笔试题复盘
  5. 专治迷茫期,喝了这碗鸡汤文,作为程序员如何保持健康心态
  6. java计算机毕业设计健身房管理系统设计MyBatis+系统+LW文档+源码+调试部署
  7. Fortran数组学习
  8. 关于南极旅游 - 王叔特别篇
  9. 【TIPTOP】 接口步骤 服务端
  10. 手机上如何把录音转换成文字