MATLAB+JAVA的混合开发

article/2025/10/8 18:19:30

近期项目中需要使用matlab跟java做混合开发。主要记录一下,此次开发遇到的问题点。

环境:使用的matlab版本是   R2018b。

当前状况:MATLAB代码已经编写好,且运行成功。需要打成jar包才可以被java调用。

步骤一:

按照教程安装好matlab后,打开matlab,查看当前matlab依赖的jdk版本号:

找到对应的java版本,安装到本机,并配置对应的环境变量。

然后开始打包:

 点击package后勾选需要保存打包好的文件路径

点击保存后开始打包,                                          打包成功后界面

 打开输出文件夹,会出现4个文件夹

 可以看到最后的jar包名称与上文中输入的一致。这就是我们需要在java中调用的jar。

将该jar包引入到java项目中,榆次同时还需要将MATLAB中的另一个jar也引入java项目,否则调用不成功。在本机的MATLAB阿德安装目录中找到javabuilder.jar一同引入。

至此,MATLAB工程就可以被java程序调用了。

步骤二:

在java项目中引入MATLAB编译好的jar包

 在java项目中编写对应代码调用jar,由于我的MATLAB程序输出的是两个参数,因此需要将两个数据分别获取到 ,然后合并到同一个文件中,保存下来后,与在MATLAB中执行后对比,确认运行成功。

import com.mathworks.toolbox.javabuilder.*;
import testhalo.TestHalo;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;public class halotest {public static void main(String[] args) {MWNumericArray input = null;Object[] result = null;TestHalo test = null;try {input = new MWNumericArray(Double.valueOf(15),MWClassID.DOUBLE);test = new TestHalo();
//这里注意  第一个参数  是MATLAB程序会输出几个返回值    从第二个参数向后 才是真正调用MATLAB的jar的入参result = test.testhalo(2,2023d,6d,15d,19d,10d,0d,1d,8000d,60d);saveArrayToFile("E:\\1\\2\\1.txt",result);} catch (MWException e) {e.printStackTrace();} finally {MWArray.disposeArray(input);MWArray.disposeArray(result);test.dispose();}}// 保存数值数组到文件private static void saveArrayToFile(String filename, Object[] response) {try {BufferedWriter writer = new BufferedWriter(new FileWriter(filename));MWNumericArray T = (MWNumericArray) response[0];	// 第一个输出参数   MWNumericArray Halo = (MWNumericArray) response[1];				// 第二个输出参数 int[] haloDimensions = Halo.getDimensions();int[] TDimensions = T.getDimensions();if (haloDimensions.length != TDimensions.length || haloDimensions[0] != TDimensions[0])return;int numRows = haloDimensions[0];  //行数int haloCols = haloDimensions[1];  //列数int tCols = TDimensions[1];for (int i = 1; i <= numRows; i++) {for (int j = 1; j <= haloCols; j++) {int[] index = {i,j};double valueHalo = Halo.getDouble(index);writer.write( Double.toString(valueHalo));if (j <= haloCols) {writer.write("\t");}}for (int k = 1; k <= tCols; k++) {int[] index = {i,k};double valueT = T.getDouble(index);writer.write( Double.toString(valueT));if (k <= haloCols) {writer.write("\t");}}writer.newLine();}writer.close();} catch (IOException e) {e.printStackTrace();}}}

遇到的问题总结: 

 1.只能接受具有单个入口点的MATLAB函数和MEX文件作为导出函数

当勾选完需要作为主程序入口的文件时会弹窗报错。这是因为勾选的文件有多个程序入口,需要将这些调用方法都拆分到其他文件中,保证这个文件中只有一个主程序调用入口。

2.调用入参传递问题

这行代码是调用MATLAB的jar的入口。可以看到引入的jar包,然后实例化后调用我们在上文中指定的修改后的主程序方法名(根据你自己定义的方法名修改),然后后面的入参,有一点要注意:第一个入参,不是真正的入参,是定义MATLAB的jar的实际返回的数据有几个。从第二个参数开始,才是真正的调用testhalo()的入参。

 3.导入java程序后调用报错

这是因为MATLAB中程序被编译成jar包后,涉及到数据格式转换。在java中编写程序调用MATLAB的jar时,需要使用double类型的入参。否则就会报错,参数类型不匹配!!!

 

 

 


http://chatgpt.dhexx.cn/article/1CGrV9yA.shtml

相关文章

Unity和Android混合开发

Unity和Android混合开发 通用的流程 https://blog.csdn.net/zhangdi2017/article/details/65629589 应用场景 Unity游戏中一些功能需要安卓系统的支持&#xff0c;如搜索wifi等。而且想接入SDK时&#xff0c;很多都是针对安卓的SDK&#xff0c;很少有针对Unity的&#xff0c…

Android App混合开发

混合开发的App&#xff08;Hybrid App&#xff09;就是在一个App中内嵌一个轻量级的浏览器&#xff0c;一部分原生的功能改为Html 5来开发&#xff0c;这部分功能不仅能够在不升级App的情况下动态更新&#xff0c;而且可以在Android或iOS的App上同时运行&#xff0c;让用户的体…

混合开发Hybrid App有哪些优势和不足?

从当前移动开发的实际情况来看&#xff0c;移动端的开发方式三分天下&#xff1a;纯原生&#xff08;Native App&#xff09;、混合开发&#xff08;Hybird App&#xff09;、网页应用&#xff08;Web App&#xff09;。 纯原生&#xff08;Native App&#xff09;&#xff1…

前端混合开发

gitbook完整版集合 混合开发 混合开发 一部分原生一部分js内嵌浏览器壳web手机端网页&#xff1a;手机操作比较困难&#xff0c;一般没有手机操作权限 混合开发框架 weex&#xff1a;采用vue框架&#xff0c;可打包成appreact-native&#xff1a;采用react框架 react语法加…

什么是混合移动App开发?

这里写目录标题 什么是混合移动App开发【重点】关于移动App开发&#xff0c;需要知道的几个概念&#xff1a; 为什么要学混合App开发从程序员的角度分析&#xff1a;从企业的角度分析:(选择合适自身的移动App开发方式)【重点】 企业如何选择合适自己的App开发方式企业中项目开发…

Flutter 混合开发

在Flutter 开发中混合的形式主要有两种 作为独立的页面 进行维护可以相互嵌套 原生集成 Flutte 混合开发的步骤&#xff1a; 创建 Flutter module添加 Flutter module 依赖&#xff08;为原生项目添加 Flutter 依赖&#xff09;在 Java/Object-c 中调用 Flutter module编写 Dar…

谈谈App混合开发

混合开发的App&#xff08;Hybrid App&#xff09;就是在一个App中内嵌一个轻量级的浏览器&#xff0c;一部分原生的功能改为Html 5来开发&#xff0c;这部分功能不仅能够在不升级App的情况下动态更新&#xff0c;而且可以在Android或iOS的App上同时运行&#xff0c;让用户的体…

原生开发、H5开发与混合开发的区别

文章目录 前言三种方式分别的优缺点原生开发Web APP (HTML5&#xff09;开发混合&#xff08;原生H5&#xff09;开发 三种方式对比 前言 移动应用开发的方式&#xff0c;目前主要有三种&#xff1a; Native App&#xff1a; 本地应用程序&#xff08;原生App&#xff09; Web…

Android Hybrid混合开发

关于混合开发常问道的问题&#xff1a; Android如何嵌套h5页面&#xff1f;h5页面如何调用Android接口&#xff1f;Android如何调用网页&#xff08;js&#xff09;方法?h5页面 判断 移动端是ios、或者Android 问题1.android如何嵌套h5页面&#xff1a; 当我们用vue开发完项…

混合开发(Hybrid App)有哪些优劣点?

从当前移动开发的实际情况来看&#xff0c;移动端的开发方式三分天下&#xff1a;纯原生&#xff08;Native App&#xff09;、混合开发&#xff08;Hybird App&#xff09;、网页应用&#xff08;Web App&#xff09;。 那么&#xff0c;混合式开发与其他的两种开发模式相比&…

原生开发、H5开发和混合开发的区别

目前市场上主流的APP分为三种&#xff1a;原生APP、Web APP&#xff08;即HTML5&#xff09;和混合APP三种&#xff0c;相对应的定 制开发就是原生开发、H5开发和混合开发。那么这三种开发模式究竟有何不同呢&#xff1f;下面我们就分别从这三者各自的优劣势来区分比较吧&#…

混合开发

一、原生语言&#xff1a; 苹果手机&#xff1a;ios系统&#xff0c;由swift和c/object-c语言编写&#xff0c;后缀名为 ipa&#xff08;ios开发的安装包的后缀名&#xff09; swift语言是一种开源的语言 安卓手机&#xff1a;android系统&#xff0c;由java&#xff08;andr…

Android : 混合开发整理指南

混合开发&#xff1a; 是一种开发模式Hybrid App. 混合开发 Native Web. 另一篇博文&#xff1a;Kotlin与H5通信 场景应用&#xff1a; 例如: 微信公众号通过JSSDK连接Native端和Web端 微信小程序通过内置框架连接Native端和Web端 混合开发的核心技术&#xff1a; JS…

Hybrid APP混合开发的一些经验和总结

Hybrid APP混合开发的一些经验和总结 写在前面&#xff1a; 由于业务需要&#xff0c;接触到一个Hybrid APP混合开发的项目。当时是第一次接触混合开发&#xff0c;有一些经验和总结&#xff0c;欢迎各位一起交流学习~ 1、混合开发概述 Hybrid App主要以JSNative两者相互调用为…

【Python编程入门】引言

What is Python? Python 是由 Guido van Rossum 工程师于1991年所开发&#xff0c;是一种高级的、解释性的、交互式的通用型编程语言。它被设计成具有高度可读性&#xff0c;是一门动态编程语言&#xff0c;并且具备自动垃圾回收机制。Python支持多种编程范式&#xff0c;其中…

python编程入门到实践pdf,python编程入门课 视频

初学者学Python编程如何快速入门? 谷歌人工智能写作项目&#xff1a;小发猫 初学python入门都需要具备那些条件&#xff1f; Python相对比较简单&#xff0c;零基础也能学typescript在npm安装后检测不到。系统学习的话&#xff0c;一般4-6个月左右能学好。python是一门语法优…

Python编程:从入门到实践(基础知识)

第一章 起步 计算机执行源程序的两种方式&#xff1a; 编译&#xff1a;一次性执行源代码&#xff0c;生成目标代码解释&#xff1a;随时需要执行源代码 源代码&#xff1a;采用某种编程语言编写的计算机程序 目标代码&#xff1a;计算机可执行&#xff0c;101010 编程语言…

Python从入门到实践电子书,python编程入门到实践pdf

《Python编程从入门到实践》txt下载在线阅读&#xff0c;求百度网盘云资源 《Python编程》&#xff08;[美]埃里克马瑟斯&#xff08;Eric Matthes&#xff09;&#xff09;电子书网盘下载免费在线阅读资源链接&#xff1a;链接&#xff1a; 提取码&#xff1a;6vcz 书名&a…

《我的世界》Python编程入门(1)Minecraft(我的世界)Python编程环境搭建

一、Minecraft环境搭建&#xff08;手动模式&#xff09; 环境搭建分为三个部分&#xff1a; 1.1、Java环境 Minecraft原始版本是用Java开发的&#xff0c;因此&#xff0c;想运行Minecraft需要安装jdk。安装Java jdk8相对来说兼容性比较好。 &#xff08;1&#xff09;安装…

Python编程

1.华氏温度到摄氏温度的转换 从键盘读取华氏温度&#xff0c;转换成摄氏温度并输出&#xff0c;保留1位小数。 转换公式为&#xff1a;c5/9*(f-32), 其中&#xff0c;f为华为温度&#xff0c;c为摄氏温度。 输入格式: 华氏温度 输出格式: 摄低温度 输入样例: 100 结尾无…