Windows下的Matlab与Java的混合编程,Java调用matlab编译的jar包(linux下请看我另外版本!)

近来因为甲方需要做拟合等功能,需要用到matlab软件,并将其功能在java中实现,然后在服务器上也要实现,因为之前根本没有听说过,所以我苦心泣血,狂干一星期找到了,踩了无数个坑,终于实现了,因此想分享给大家!

目录

一、Windows下java调用matlab

1、Matlab安装

2、Matlab中打jar包(基于R2018b版本,但是R2020以下都适用)

 可能遇到的问题!!!

3、在java中使用matlab生成的jar包


一、Windows下java调用matlab

1、Matlab安装

网上很多教程,这里不建议装太新的版本,因为容易出错误!!!

要注意的地方就是,一定要注意版本!!!下面会介绍

2、Matlab中打jar包(基于R2018b版本,但是R2020以下都适用)

1、我们先创建一个.m文件,直接新建脚本,把这段代码复制进去就行

//这是相比于其他人复杂一点的程序,输入一个变量,并返回一个数组
//test(input) 是你的函数
function [result1, result2, result3] = test(input)
  result2 = 3;
  result3 = 2;
  result1 = input;
  
end

2、命令行窗口测试

test(4)

3、进行编译打包

 在命令行输入deploytool

deploytool

①选择java package

②选择自己要打包的.m文件(如果找不到的话,请返回主界面,将文件夹改为当前.m文件的文件夹)

③填写jar包名字

④修改类名

 ⑤右上角的Package点击

 ⑥成功后

 ⑦找到for_redistribution_files_only文件即可有jar包

 可能遇到的问题!!!

1、有可能在你的.m文件中注释导致你的打包出现问题,请删除!!!

2、java版本对应的问题

命令行输入version -java

version -java

找到当前matlab版本对应的jdk环境,一定要对应!!环境变量也要设定好!

3、文件类型无效,提示只能接受具有单个入口点的MATLAB函数和MEX文件作为导出函数!!

 可能你的.m文件是一个类,matlab由于版本的原因,我尝试了R2022版本的,是可以将类文件进行打包的,但是2018版本就不能打包,(类文件是方便写程序,使得程序比较简单)所以,我们将类文件,改成一个或者多个单个函数的.m文件,

例如:

test.m文件调用了psobj.m,启动程序是test.m,我们进行打包,

 我们只需选择

 psobj.m文件会自动添加

 至此,Jar包就生成完毕了

3、在java中使用matlab生成的jar包

在项目中创建lib文件夹,将刚刚生成的jar包,复制到该文件夹下,

 将jar包引入

 选择library

 找到该项目下jar包的位置,确定OK!

我们只需要引入import,即可引入成功,我这里用matlabTest举例

import XX.XX;
//第一个xx是你的包名,第二个是你的类名
//我引入
import matlabTest.matlabTest;

点进去看一下源码,那我们的函数怎么使用呢,输入的参数一定要和你的.m文件对应!!


    public void untitled(List var1, List var2) throws MWException {
        this.fMCR.invoke(var1, var2, sUntitledSignature);
    }

    public void untitled(Object[] var1, Object[] var2) throws MWException {
        this.fMCR.invoke(Arrays.asList(var1), Arrays.asList(var2), sUntitledSignature);
    }
//我们一般使用这个方法,第一个参数是指你返回多少结果,第二个参数指 你可以输入多个参数,也就是你matlab中想要输入的参数,untitled是我在matlab中函数的名字
    public Object[] untitled(int var1, Object... var2) throws MWException {
        Object[] var3 = new Object[var1];
        this.fMCR.invoke(Arrays.asList(var3), MWMCR.getRhsCompat(var2, sUntitledSignature), sUntitledSignature);
        return var3;
    }

在使用matlab生成的jar包时,我们还需要将javabuilder导入!!!

具体的位置是在:xx\MATLAB\R2018b\toolbox\javabuilder\jar\javabuilder.jar

xx\MATLAB\R2018b\toolbox\javabuilder\jar\javabuilder.jar

上述同样的方法,导入即可!

public class test {

    public static void main(String[] args) throws MWException {

        matlabTest test = new matlabTest();
        test.untitled(1,"参数1","参数2");

    }
}

即可进行操作!!

注意:

 因为matlab中经常使用二维数组,故我们也有对应的类,并将data作为参数传入即可!!

double[][] doubles ={{1,1,1,1},{2,2,2,2},{3,3,3,3}};
MWNumericArray data = new MWNumericArray(doubles, MWClassID.DOUBLE);

至此 在windows下调用matlab生成的jar包即可完成!请大家有问题的话,多多评论留言!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值