熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

在Java程序中調用Matlab函數

2013-11-23 19:15:44  來源: Java核心技術 
    環境准備
   
    機器上有Eclipse 和Matlab a
   
    機器的環境變量設置
   
    ()JAVA_HOME (JDK的安裝位置如C:\Program Files\Java\jdk
   
    設置後重啟matlab才能有效
   
    用getenv JAVA_HOME在Matlab的命令窗口中試驗看看得到的返回值正確方可說明其對Matlab生效了
   
    ()Classpath
   
    添加matlabInstallRoot \toolbox\javabuilder\jar\javabuilderjar
   
    ()Path
   
    添加%JAVA_HOME%/bin/javac
   
    將matlab的m文件生成為jar
   
    在matlab的command窗口輸入deploytool會在右側彈出一個新窗口(Deployment Tool)
   
    在Deployment Tool中點擊new按鈕選擇Matlab Builder for Java與Java Package新建一個工程名字如flyingprj
   
    確保在Deployment Tool面板中的Generate Verbose Output被勾上了
   
    將欲被java調用的m文件(如mydrawm其中包括兩個參數(xy))從Matlab整個界面的左側工作目錄面板拖拽到Deployment Tool中的新建的類下面的class 文件夾下
   
    點擊build按鈕則會在matlab的當前目錄下生成以一個與工程同名的文件夾如果build成功會看到文件夾結構如下
   
    Flying |distrib
   
    | |flyingjar
   
    | |flyingctf
   
    |
   
    |src
   
    | |flying
   
    | |flyingclassjava
   
    | |flyingMCRjava
   
    | |classes
   
    | |flying
   
    | |flyingclassclass
   
    | | flyingMCRclass
   
    |buildlog
   
    |flyingctf
   
    |flyingjar
   
    |mccExcludedFileslog
   
    |readmetxt
   
    編寫java方法准備調用剛剛生成好的flyingjar中的Matlab函數
   
    在java工程屬性的BuildPath中添加兩個jar包
   
    matlabroot\toolbox\javabuilder\jar\javabuilderjar
   
    TestDirectory\flyingjar
   
    編寫函數示例如下
   
    package test;
   
    /**
   
    * test for a Matlab Call
   
    *
   
    */
   
    import commathworkstoolboxjavabuilder*;
   
    import flying*;
   
    public class testMatlabClass {
   
    /**
   
    * @param args
   
    */


   
    public static void main(String[] args) {
    
    // TODO Autogenerated method stub
   
    try {
   
    Systemoutprintln(Begin
   
    flyingclass flyingDraw=new flyingclass()
   
    Systemoutprintln(Middle
   
    flyingDrawmydraw(
   
    Systemoutprintln(Here
   
    }catch (Exception e){Systemoutprintln(e)}
   
    }
   
    }
   
    如果不能正常運行可以考慮在 classpath 中加入 flyingjar 所在的位置
   
    詳  細
   
    參見 matlab 的幫助文件
   
    數據類型相關
   
    Java 的數值型數組可以直接作為輸入參數傳遞到 m 文件上
   
    如mydraw(xy) 可以畫x=[ ] y=[ ]這樣的線圖Java調用該方法時候如果傳遞的參數是整型或者實數型數組則直接可成功如java中
   
    int[] a = new int[];
   
    int[] b = new int[];
   
    // 給 ab 賦值 …
   
    // …
   
    // 調用
   
    flyingclass flyingDraw = new flyingclass()
   
    flyingDrawmydraw(ab)
   
    注意ab 最好所有有索引的位置都有值否則如果沒有充分賦值曲線可能會最終折回()點
   
    Matlab程序(m文件)的修改
   
    找到TestDirectory\flyingjar所在的位置(因為按照上述步驟的話m源文件就在該位置附近)這個位置從Eclipse的Package Explore可以用看到
   
    直接修改欲改動的m文件
   
    打開Matlab 在Command輸入Deploytool 在新打開的部署面板中打開該m文件所在的工程如flyingprj
   
    選中相應工程下Class 文件夾下的m文件點擊工具欄的Build按鈕
   
    則相應源文件被重新編譯如果按照前面步驟添加的jar包則編譯後新生成的jar包自動替換掉原有的jar又由於這個jar的位置已經作為BuildPath告訴了java的相應工程因此Java端不需要做任何調整即可正確調用到新修改了內容的matlab方法


From:http://tw.wingwit.com/Article/program/Java/hx/201311/26534.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.