本文部分內容參考了http://www.360doc.com/content/15/1103/16/1180274_510463048.shtml
一、檢查Java環境
對於已經裝上JAVA環境的計算機,首先要確定一下裝的環境是否與當前的Matlab builder for java版本相兼容,本文使用的Matlab版本是R2014a。
在CMD.EXE中鍵入 :java -version
如果出現圖中信息則表示已經安裝好了JAVA環境並且可以看到它的版本

進一步在cmd中輸入javac -version
可以明確的獲得版本信息

現在獲得了JAVA環境信息,再來看看在Matlab中是否對這個版本兼容,在MATLAB(使用的版本是2014a)里command window里輸入version -java,得到了這樣的結果

可以看到二者是兼容的,這里如果兩個版本號不同但是相差很近的話也是可以的。
二、編寫Matlab函數並生成.jar包
這里編寫兩個函數operation(a,b),和measureDim(c)兩個函數,功能分別是返回a,b的四則運算,以及求一維數組c的維度
operation.m
function [sum,sub,mul,div] = operation(a,b)
sum = a+b;
sub = a-b;
mul = a*b;
div = a/b;
end
measureDim.m
function dim = measureDim(a)
dim = length(a);
在命令行參數中鍵入deploytool
彈出下面界面,選擇"Library Compiler"

進一步彈出下列界面 
在1處選擇要打包成的應用類型,這里選擇“java package”,在2處添加類中的接口函數,在3處選擇MCR插件的獲取方式(無論選擇哪種,事實上都會先考察電腦上是否已有MCR,沒有再采用相應行動),在4處填寫項目名稱,繼續向下看這個頁面

在5處修改類的名字,在6處添加運行類需要的其他函數,最好把m文件中調用的Matlab的函數都添加進來
現在該設置的都差不多了
點擊頁面上側的"Setting"按鈕,設定文件位置之后點擊Package,生成相應文件

在打包過程中出現了下面存在警告的界面

點擊log file查看是什么問題,發現文檔中出現了這樣的警告

看網上其他網友的說法,這個警告無傷大雅,確實,后來在Myeclipse中調用生成的程序,並沒有出現什么問題。(但是還是想知道怎么從根本上去掉這些警告,如果有路過的知道怎么辦的大神求指點!)
三、在Myeclipse調用程序
1、首先在工程中導入Matlab生成的JAR文件,並且找到MATLAB安裝文件夾里的toolbox-->javabuilder-->jar-->javabuilder.jar,也把它導入到工程。
編寫測試代碼如下,MyOperation是打包好的類,operation和measureDim是包含的兩個函數
package java1revise; import com.mathworks.toolbox.javabuilder.MWClassID; import com.mathworks.toolbox.javabuilder.MWException; import com.mathworks.toolbox.javabuilder.MWNumericArray; import operation.MyOperation; public class testOperation { public static void main(String[] args) { // TODO Auto-generated method stub double a = 1; double b = 2; double[] c = {1,8,9}; Object[] inpara = new Object[2];//存放輸入參數 Object[] operationRe = new Object[4];//存放輸出結果 Object[] dimRe = null;//存放輸出結果 MWNumericArray ma = new MWNumericArray(a,MWClassID.DOUBLE); MWNumericArray mb = new MWNumericArray(b,MWClassID.DOUBLE); MWNumericArray mc = new MWNumericArray(c,MWClassID.DOUBLE); inpara[0] = ma; inpara[1] = mb; try { MyOperation aOpera = new MyOperation(); operationRe = aOpera.operation(4, ma,mb); //operationRe = aOpera.operation(4, inpara); dimRe = aOpera.measureDim(1, mc); for(Object temp:operationRe) System.out.println("運算結果: "+temp.toString()); System.out.println("維數:"+dimRe[0]); } catch (MWException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
運行結果:
運算結果: 3
運算結果: -1
運算結果: 2
運算結果: 0.5000
維數:3
2、總結
1、調用Matlab打包函數,需要導入打包生成的JAR文件以及javabuilder.jar
2、在給Matlab生成函數傳參數時,需要先將數據轉換為MWNumericArray類型,以供Matlab識別
3、再進一步將多個參數賦值給一個對象數組進行傳參,或者直接輸入參數也可以,程序中無論是operationRe = aOpera.operation(4, ma,mb)還是operationRe = aOpera.operation(4, inpara)中都是可以的。
4、Matlab生成函數的返回值類型是Object[] ,過程中注意Object[]的初始化。
