• 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当前文件夹目录,中间为命令窗口,右边是工作空间,如图:

    可以点击左侧当前文件夹窗口上方的图标,更改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窗口:

     

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

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

    2.5 打包成功之后,会生成下图所示的几个文件夹,具体每个文件夹的作用,没有深究,我们只需从下图 for_testing 文件夹,找到我们需要的在上2.3步骤中命名的 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 所要求的一致)

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

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

    配置为:

    C:Program FilesMATLABR2017b untimewin64;

    C:Program FilesMATLABR2017bin;

    这两个配置还有顺序要求,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();
    			}
    		}
             
    }
    

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

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

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

    1、安装 mcr

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

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

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

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

    安装完成后会,会将 C:Program FilesMATLABMATLAB Runtimev93 untimewin64 添加到 Path 环境变量中,如果没有,需要添加该配置。

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

     %matlab安装目录%R2017b oolboxcompilerdeploywin64

     

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

    安装完成后会,会将 C:Program FilesMATLABMATLAB Runtimev93 untimewin64 添加到 Path 环境变量中,如果没有,需要添加该配置。

     2、java 调用

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

     至此,完成。

  • 相关阅读:
    大数据之MapReduce工作机制
    swoft +nginx 快速获取客户端的真实的IP
    JWT 介绍 详解
    swoft 切面编程 (AOP编程思想)
    CSP 编程模型
    Ubuntu 16.04 Mysql 重置密码
    ubuntu 提示:rm: cannot remove 'you-get/tmp': Directory not empty
    Ubuntu 系统升级到php7.2/7.3 (平滑升级)-朝花夕拾
    git clone 非标准的ssh端口(非22)端口
    Ubuntu 升级npm 以及安装cross-env 过程中遇到的问题
  • 原文地址:https://www.cnblogs.com/gregcn/p/8780662.html
Copyright © 2020-2023  润新知