使用Java调用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