ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

使用Java调用Matlab程序代码

2022-02-22 14:02:13  阅读:198  来源: 互联网

标签:Java JDK 代码 程序代码 jar Matlab 打包


因一次项目经历,需要用到通过Java调用Matlab程序代码,当时也百度了许久才找到了一个适合的办法,下面是找到的一篇非常详细的博客,以供自己后面查漏补缺。
原文链接
https://blog.csdn.net/qq_33546309/article/details/86309944?spm=1001.2014.3001.5502

Java调用Matlab程序代码

基于本人的一次项目经历,找了很多篇博客和百度才艰难的走通了Java代码调用Matlab代码的方法。本文就总结性的介绍一下如何通过Java代码调用Matlab代码。因为Matlab画图优势非常明显,所以在制作软件或者封装功能时需要使用其他代码调用Matlab代码。

Java调用Matlab代码目前来说常规方法只有一种,即将Matlab代码打包成.jar包,然后Java再调用.jar包。由于Matlab对其源码进行了加密处理,所以任何非Matlab软件调用Matlab代码必须要运行Matlab环境,而不能直接拷贝其.lib文件。因此Matlab提供了MCR软件,如果需要在其他地方运行Matlab代码,需要安装MCR软件。

在这里插入图片描述

下面开始讲Java如何调用Matlab代码,及Matlab代码的打包。

第一步:确定Matlab的javaJDK版本

Matlab在安装的时候一般已经自动安装有Java的JDK,因此我们需要确定Matlab软件得JDK版本号是多少。在Matlab命令行窗口输入“version -java”,就可以显示Matlab软件中的JDK版本号,如下图:

在这里插入图片描述

可以看到我的Matlab软件中的JDK版本为1.7.0,因此该Matlab软件打包出来的.jar包版本也为1.7.0。我们只需要电脑上的Java环境的版本号前面的大类与其相同就可以,即我这里只需要1.7版本的JDK。(注意:版本号的大类必须相同,否则打包会出现错误!)。

第二步:确定windows系统中的JavaJDK版本

我们可以通过在windows的命令窗口查看自己电脑的JavaJDK版本号。通过快捷键“win+R”,输入“cmd”,确定后进入命令窗口。

在这里插入图片描述

在窗口输入“java -version”和“javac -version”

在这里插入图片描述

可以发现如果显示的javaJDK版本是1.7版本,注意:这里一定要确认java和javac的版本是否和Matlab中的相同。如果不相同则需要更改环境变量中Java的JDK版本,具体怎么修改与Java环境变量的配置相同。

第三步:Matlab代码打包成.jar包

如果前面两步都已经完成,那么恭喜你接下来就可以将Matlab代码打包成.jar包了。这里建议关闭Matlab软件重新启动一遍。因为很有可能你在第二步中更改了windows的JDK版本,那么就需要重启Matlab软件,否则Matlab软件还是不能成功打包.jar包。原因就是Matlab软件还没反应过来系统的JDK已经发生了更改。

首先在Matlab命令窗口输入“deploytool”会立刻弹出“Compiler”窗口如下:

在这里插入图片描述

选择其中的“Library Compiler”点击,就进入了代码打包窗口:

在这里插入图片描述

选择左上角框内,可以发现可以将Matlab代码打包成c,c++或java等语言可识别的文件。这里我们选择其中的“Java Package”。
接下来步骤如下图所示。

在这里插入图片描述

1.点击红框1中的“+”号,选择要编译的函数文件(注意只有函数文件才能被编译打包成.jar包,即Matlab文件必须为一个函数),我这里选择的是我自己的一个函数文件“main.m”。
2.选择好文件后上图最下面的红框中会出现内容,其中“Class Name”为打包成.jar包后的类名,之后的Java代码调用有用。还有“Mathod Name”为Matlab文件中原有函数的调用格式及输出格式,相信使用过Matlab的都应该知道。当Java代码调用这个.jar包中“Class1”类中的“main”函数时,输出格式就会是这样子。
3.然后选择红框2中的“Runtime downloaded from web”,这个选项表示打包完的文件夹中包含的MCR软件是需要联网才能安装完成。而另一个选项“Runtime included in package”,表示打包完成的文件夹中包含的MCR软件是可以离线安装的。这两个选项选择其中一个就行,视个人情况选择。
4.最后选择红框3中的绿色勾勾,按下之后选择打包的路径系统就会自动开始打包,这个需要一段时间。打包窗口如下:

在这里插入图片描述

如果打包失败,则显示下图:
在这里插入图片描述

我们可以打开红字标出的日志文件查看出错原因。一般来说很有可能是第二步中的windows系统JDK版本与Matlab版本还不一致,比如更改完JDK版本后没有重启Matlab软件。如果是其他情况可以看日志的错误提示,或者再私聊我。

当这个窗口出现三个绿勾的时候说明打包已经成功。那么恭喜你可以进入第四步了。如下图:

在这里插入图片描述

同时打包好的.jar包所在的文件夹也会弹出
在这里插入图片描述

其中“for_redistribution”文件夹中放着传说中的MCR软件,这个软件至关重要,如果你的程序需要在别的机器上运行就需要这个MCR软件,如下图:
在这里插入图片描述

而你打包好的.jar包则在“for_redistribution_files_only”和“for_testing”文件夹中各有一份。如果要用Java程序调用就只需要带着这个.jar包就行了。

第四步:Java代码运行Matlab程序

恭喜你成功进入第四步。
首先打开你的Java工程,找到需要调用Matlab代码的地方。(这里可能有人会发现无法打开Eclipse了,很简单,可能是你们之前在环境变量中修改JDK版本时没有和Eclipse的版本协调好,可以选择将JDK版本改回,现在改回没有关系;也可以选择协调好Eclipse的JDK版本,具体的就不在这里说了)。
将你打包好的.jar包放在Java工程的“lib”文件夹中,并导入。然后在需要调用Matlab代码的地方敲入如下代码:

在这里插入图片描述

其中我申请了一个Object数组用来存储函数的输出数据。
第二行“main.Class1 func2 = new main.Class1();”表示新建一个main.jar包中的“Class1”对象。
第三行则表示该对象调用其“main”函数,其中5表示5个输出参数,s1到s7表示我这个函数有七个输入参数。

至此Java代码调用Matlab代码已经结束。

PS:如果是设计一款软件,则需要将之前产生的MCR软件一并封装或者拷给他人,也可以使用Matlab自带的MCR软件,只不过非常庞大,具体在Matlab安装路径的“\toolbox\compiler\deploy\win64”中。

PS:上面有提到这种方法是常规方法。那么必然有非常规方法,即破解Matlab的加密,从而获得其矩阵运算的源代码,这种方法在国外有人成功过并发表了出来,但很快被Matlab官网警告并勒令删除方法,否则将采取法律手段。所以想要尝试的朋友可以自己偷偷尝试。

标签:Java,JDK,代码,程序代码,jar,Matlab,打包
来源: https://blog.csdn.net/ilywxu/article/details/123066386

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有