java調用matlab代碼方法[matlab version 2010a]

      由於課題的原因,又要搞搞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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章