由於課題的原因,又要搞搞java。好久沒開eclipse了,覺得好陌生,尤其是當要用this的時候,你抖抖索索鬼使神差地敲了個self上去。。
囉嗦完畢,java畫了個界面,核心算法是用matlab寫的,所以必須調用matlab代碼。網上找了些資料,似乎很少有針對matlab 2010a版本的,總結了下,方法如下:
首先請保證java已正確安裝並且設置了環境變量。關於環境變量的設置,網上一堆介紹,比如http://www.233.com/ncre2/JAVA/jichu/20091220/090015124.html,這裏就不再贅述。然後請保證matlab的版本支持MATLAB Builder for Java,可以在matlab的命令窗口輸入deploytool,如果提示命令無效,則說明版本不支持。我原來用的7.1的就不支持,所以改裝了2010a。
基本工作完成後,let's begin!
首先在matlab中新建個.m文件,隨便寫個算法,我們就用個簡單的sum函數吧。.m文件中語句爲:
function data = mysum(vec)
data = sum(vec)
將該文件保存,命名爲mysum.m。
然後在matlab中菜單欄 File-->new-->Deployment Project 或者如上述在命令行輸入deploytool。出現界面如下:
注意這裏一定要選擇Java Package。Name一項中爲所生成的jar文件名稱,會在後面eclipse中調用時用到,所以謹慎命名。
隨後,在matlab的Deployment Tool對話框中選擇Build,然後add files,將我們之前所保存的mysum.m文件添加進去。
再點擊Package標籤,這裏注意,一定要點Add MCR,然後將默認的MCR包含進去。否則在eclipse中編譯的時候找不到類庫。
然後開始編譯jar文件,點擊Deployment Tool窗口右邊的build按鈕。
build完成之後,會在你之前設定的路徑下生成一個文件夾,裏面包含了jar文件、所有的class文件、java文件等等。
然後在eclipse中你需要調用matlab代碼的工程中導入外部jar包,注意,這裏還需要到matlab安裝目錄下找到javabuilder.jar,一同導入。(網絡上有很多,不再贅述)
在你調用方法的類中import兩個包,一個是javabuilder,另一個是我們自己生成的lcxTest。
//import matlab jar
import lcxTest.*;
import com.mathworks.toolbox.javabuilder.*;
相關調用示例代碼如下:(部分採用了上述鏈接中的代碼,作了適當調整)
Object[] x = null;
Object[] result = null;
lcxTest.Class1 lcx = null;
try
{
x = new Object[3];
x[0]=1;
x[1]=2;
x[2]=3;
lcx = new lcxTest.Class1();
// Compute magic square and print result
result = lcx.mysum(1,x[1]); //1表示輸出一個東西
System.out.println(result[0]);
double res=((MWNumericArray)result[0]).getDouble(1);//轉換成java的數據類型
System.out.println("res is: "+res);
}
catch (Exception e)
{
System.out.println("Exception: " + e.toString());
}
finally
{
// Free native resources
MWArray.disposeArray(x);
MWArray.disposeArray(result);
if (lcx != null)
lcx.dispose();
}
這樣就可以成功調用matlab 2010a版本的.m文件了,說起來也不難。不過編譯速度真是個問題。。另外,調用之後,原來的java風格的界面會自動變成windows風格。
end