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 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(); } } }
代碼運行成功,即彈出如下窗口:
二:在未安裝 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 Files\MATLAB\MATLAB Runtime\v93\runtime\win64 添加到 Path 環境變量中,如果沒有,需要添加該配置。
(2)從已安裝 matlab 的目錄下拷貝;其所在的目錄為:(該種安裝方式未測試)
%matlab安裝目錄%\R2017b\toolbox\compiler\deploy\win64
找到該文件后,在安裝之前,應當先解壓該該文件(雖然是以.exe結尾的文件,但仍然可解壓,如果不解壓,安裝過程中有可能出現問題)
安裝完成后會,會將 C:\Program Files\MATLAB\MATLAB Runtime\v93\runtime\win64 添加到 Path 環境變量中,如果沒有,需要添加該配置。
2、java 調用
該部分與第一部分中的java調用相同,同樣出現上文出現的繪圖結果窗口。
至此,完成。