64位 JDK 1.8 调用Matlab 2017b打包的jar

DK写在前面:

写这篇文章的主要目的是记录一次java调用matlab 打包的jar过程,也参考了很多网上的文章,因为步骤雷同,所以其中一些截图就引用网上的了,以备将来查阅。

文章分为2大部分,一是matlab环境和打包步骤的介绍,二是在安装有matlab和没有安装matlab的机器上,调用和运行matlab打包的 jar 方法。

第一部分:

matlab环境安装和打包jar文件:

本次试验所用的软件及版本为:matlab 2017b, jkd 1.8;

1、matlab 2017b和jdk 1.8的安装配置步骤,不在赘述。

2、脚本编写和打包jar

2.1 打开matlab主程序,显示matlab主页面,在左侧是matlab当前文件夹目录,中间为命令窗口,右边是工作空间,如图:

64位 JDK 1.8 调用Matlab 2017b打包的jar

可以点击左侧当前文件夹窗口上方的图标,更改matlab当前文件夹;

2.2 新建 .m 扩展名的脚本文件

新建脚本有两种方式,一是直接点击ribbon界面菜单栏的新建按钮,在下拉列表中,选择脚本;二是在左侧当前文件夹目录树中,右键,选择新建脚本命令,两种方式是一样的。

2.3 编写函数

双击打开新建的脚本文件,再输入脚本,在此试验借用了网上的一小段代码,“短小精悍”,就拿来主义了。

%画图 自定义函数drawplot 参数 x y 
   function drawplot(x, y) 
    plot(x, y); %%使用matlab函数plot()作图
    grid on %网格显示
    xlabel('X轴值')
    ylabel('Y轴值')
    title('Java调用MatLab作图例子')

直接将以上代码复制粘贴到脚本文件中;

2.4 打包jar

在命令窗口中输入deploytool(可在输入几个字母后,按tab键,有代码提示),弹出Matlab Compiler窗口:

64位 JDK 1.8 调用Matlab 2017b打包的jar

选择 Library Compiler ,弹出如下窗口:

64位 JDK 1.8 调用Matlab 2017b打包的jar

按图中标注的数字顺序依次选择和输入jar包名称、类名和选择脚本文件,最后单击 package按钮,在弹出的保存工程窗口选择保存位置和填写工程名称,打包成功截图如下:

64位 JDK 1.8 调用Matlab 2017b打包的jar

2.5 打包成功之后,会生成下图所示的几个文件夹,具体每个文件夹的作用,没有深究,我们只需从下图 for_testing 文件夹,找到我们需要的在上2.3步骤中命名的 jar 包即可。

64位 JDK 1.8 调用Matlab 2017b打包的jar64位 JDK 1.8 调用Matlab 2017b打包的jar

到此,matlab将脚本文件打包成可被 java 调用的 jar 的步骤已经完成。

第二部分:

该部分分为2种情况下调用方式:一是在安装有相应版本的 matlab 软件的机器上调用 ,二是在安装matlab compiler runtime (简称 mcr,下文所提到的 mcr,都指该软件) 的机器上调用。

准备所需的 jar:除了在上一部分提到的 matlab 打包生成的 jar 之外 ,还需要在 matlab 安装目录下的 javabuilder.jar,其所在位置如下图(本机安装目录是 c:/Program Files/MATLAB):

(注意:无论是否在安装 matlab 的机器上调用 matlab 所打包的 jar,都要保证 jdk 版本与位数与 matlab 所要求的一致)

64位 JDK 1.8 调用Matlab 2017b打包的jar

一:在安装了相应版本的 matlab 软件的机器上调用打包的 jar :

1、在安装了相应版本的 matlab 机器上调用打包的 jar 时,一般情况下,不需要再配置 matlab 环境,因为我们在安装时,软件自动在环境变量 Path 下配置了相关配置,我们只需要检查一下,是否存在相关配置即可,如果没有 matlab 配置,手动添加即可:

配置为:

C:\Program Files\MATLAB\R2017b\runtime\win64;

C:\Program Files\MATLAB\R2017b\bin;

这两个配置还有顺序要求,runtime要在前(根据看到的其他文章中说明,猜测的,没有实际测试)。

2、 java 工程调用

在 myeclipse 中新建 java 工程,将在本部分提到的2个jar包添加到工程引用,并将以下代码写在测试类的 main 方法中,下面的代码中的类名与文章第一部分打包截图有所不一致,读者在按以下代码运行时,应根据代码后面的注释,修改为实际 jar 包中的类名和方法名。

public static void main(String[] args) {
		MWNumericArray x = null; // 存放x值的数组
		MWNumericArray y = null; // 存放y值的数组
		plotter plot = null; // 自定义plotter实例,即打包时所指定的类名,根据实际情况更改
		
		int n = 20;//做图点数
		try {
			int[] dims = {1, n};
			x = MWNumericArray.newInstance(dims, MWClassID.DOUBLE, MWComplexity.REAL);
			y  = MWNumericArray.newInstance(dims, MWClassID.DOUBLE, MWComplexity.REAL);
			
			//定义 y = x^2
			for(int i = 1; i <= n; i++) {
				x.set(i, i);
				y.set(i, Math.pow(i, 2));
			}
			
			//初始化plotter
			plot = new plotter();
			
			//做图
			plot.drawplot(x, y);// 在脚本文件中的函数名,根据实际情更改
			plot.waitForFigures();// 不调用该句,无法弹出绘制图形窗口
			
		} catch (Exception e) {
			// TODO: handle exception
		} finally {
			MWArray.disposeArray(x);
			MWArray.disposeArray(y);
			if(plot != null) {
				plot.dispose();
			}
		}
         
}

代码运行成功,即弹出如下窗口:

64位 JDK 1.8 调用Matlab 2017b打包的jar

二:在未安装 matlab软件,但安装了 mcr 的机器上调用打包的 jar:

在没有安装相应版本的 matlab 机器上调用 matlab jar时,应当安装 mcr 环境。

1、安装 mcr

获取 mcr 安装包有两种途径,

(1)从 matlab 官网下载对应版本的 mcr。

本次测试所用的 matlab 软件为 2017b版,故在官网(https://cn.mathworks.com/products/compiler/matlab-runtime.html)下载了如下版本的安装包:

64位 JDK 1.8 调用Matlab 2017b打包的jar

在下载完成后得到以MCR_R2017b_win64_installer.exe命名的安装文件,在安装之前,要先解压所下载的文件,虽然是以 exe 结尾的文件,但仍然可解压,如果不解压,在安装过程中可能会出现问题(亲测)。

安装完成后会,会将 C:\Program Files\MATLAB\MATLAB Runtime\v93\runtime\win64 添加到 Path 环境变量中,如果没有,需要添加该配置。

(2)从已安装 matlab 的目录下拷贝;其所在的目录为:(该种安装方式未测试)

%matlab安装目录%\R2017b\toolbox\compiler\deploy\win64

64位 JDK 1.8 调用Matlab 2017b打包的jar

找到该文件后,在安装之前,应当先解压该该文件(虽然是以.exe结尾的文件,但仍然可解压,如果不解压,安装过程中有可能出现问题)

安装完成后会,会将 C:\Program Files\MATLAB\MATLAB Runtime\v93\runtime\win64 添加到 Path 环境变量中,如果没有,需要添加该配置。

2、java 调用

该部分与第一部分中的java调用相同,同样出现上文出现的绘图结果窗口。

至此,完成。

相关推荐