利用matlab生成jar包

本博客轉(zhuǎn)載自http://blog.csdn.net/wengdada/article/details/52017274

主要過程:利用MATLAB的Compiler工具將MATLAB函數(shù)編譯成.jar文件,在Eclipse中實現(xiàn)對.jar文件中函數(shù)的調(diào)用议双,以此實現(xiàn)MATLAB和JAVA的混合編程。


1.環(huán)境配置要求:運行機器上必須裝有JRE并且版本要和MatLab(Matlab這里用的是2016b版本)自帶的JRE版本保持一致掸犬。在Matlabd的Command Windows中輸入【version -java】以及打開cmd 分別輸入命令【java -version】和【javac -version】分別驗證編譯和運行版本。

在matlab中驗證matlab用的jdk版本

在cmd中驗證系統(tǒng)中安裝的jdk版本

2.在Matlab中新建一個函數(shù)文件绪爸,編寫需打包成.jar到的Matlab函數(shù)并保存湾碎,這里以一個rgbtogray()函數(shù)為例。

Paste_Image.png

代碼如下:

   %函數(shù)功能:rgbtogray()這個函數(shù)將D:\matlab_java_test\目錄下的所有.jpg文件轉(zhuǎn)化為灰度圖奠货,
  %并且顯示出來介褥,之后將得到的灰度圖改名存放在原來的目錄下
  %status:函數(shù)返回值,若成功處理圖片递惋,放回SUCCESS;
  %file_path:輸入?yún)?shù)柔滔,要處理的圖片所在的路徑 
  img_path_list = dir(strcat(file_path,'*.jpg'));%獲取該文件夾中所有jpg格式的圖像
  photo_num = length(img_path_list);%獲取該文件夾中所有jpg格式的圖像的數(shù)量 
  disp('The number of pictures '); 
  fprintf('%d \n',photo_num);% 顯示圖像數(shù)量 
  if photo_num > 0 %.jpg的圖像存在
    for j = 1:photo_num image_name = img_path_list(j).name;% 圖像名
      image = imread(strcat(file_path,image_name)); 
      Image = rgb2gray(image);%調(diào)用matlab原有函數(shù)將圖片轉(zhuǎn)化為灰度圖 
      imshow(Image); 
      imwrite(Image,strcat('D:\matlab_java_test\new',image_name,'.jpg'));%保存圖片 
      pause(2);%暫停兩秒,用來顯示圖像 
    end 
    close all; %由于出來好多個figure,一鍵關(guān)閉 
    status = 'SUCCESS'; 
  end
end```
***
3.在Matlab下選擇應(yīng)用程序萍虽,使用Library Compiler工具得到Matlab函數(shù)的.jar文件睛廊。打開Library Compiler工具后,選擇Java Package,再點擊+號杉编,選擇要打包的.m文件超全,填寫修改相關(guān)的信息,紅框4顯示的是打包成.jar文件后里面包含的類以及方法的名稱邓馒,信息可以根據(jù)自己需要更改嘶朱,最后單擊Package。生成的文件我存放在D盤下光酣,可以看到有四個主要的部分疏遏,for_redistribution文件,for_redistribution_files_only文件救军,for_testing文件以及PackagingLog.txt财异。

![Paste_Image.png](http://upload-images.jianshu.io/upload_images/2761157-5920fa85ba601706.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![Paste_Image.png](http://upload-images.jianshu.io/upload_images/2761157-35e6a8627d61962e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![Paste_Image.png](http://upload-images.jianshu.io/upload_images/2761157-32f3533ddc62d9cf.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


-for_redistribution包含用于安裝應(yīng)用程序和MATLAB Runtime的文件,可以將這份文件復(fù)制到?jīng)]有安裝Matlab的電腦上唱遭,安裝該文件戳寸,在安裝過程中會提示要安裝獨立的共享庫MATLAB Runtime,安裝之后不需要Matlab也可以運行編譯后的Matlab的程序或者元件(The MATLAB Runtime is a standalone set of shared libraries that enables the execution of compiled MATLAB applications or components on computers that do not have MATLAB installed)胆萧。 

-for_redistribution_files_only文件夾包含應(yīng)用程序的重新發(fā)布所需的文件庆揩。這些文件可以分發(fā)到那些有MATLAB或者有 MATLAB Runtime 的用戶的電腦上。

 -for_testing文件夾包含創(chuàng)建的所有由MCC創(chuàng)建的文件跌穗,像二進制文件和jar订晌,頭和源文件,使用這些文件來測試安裝蚌吸。 -PackagingLog.txt是由編譯器生成的日志文件锈拨。 如果.jar庫中的內(nèi)容不熟悉也可以找到doc下的html文件夾,打開index.html,里面有Javadoc參考資料羹唠。

![Paste_Image.png](http://upload-images.jianshu.io/upload_images/2761157-d01df2cc7ed18445.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![Paste_Image.png](http://upload-images.jianshu.io/upload_images/2761157-d687249cfd1a1106.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

***
4.打開Eclipse奕枢,新建一個Java Project娄昆,命名為TestMatlab,新建一個類命名為Test,然后把生成的.jar文件(如rgbtogray.jar)復(fù)制到該工程下,除此之外缝彬,還要將另外一個.jar文件復(fù)制到該工程下萌焰,該文件是javabuilder.jar,在<mcr_root>*\toolbox\javabuilder\jar\win64\javabuilder.jar目錄下可以找到谷浅,<mcr_root>*是MATLAB的安裝目錄或者MATLAB Runtime的安裝目錄扒俯,這兩個目錄下均可以找到toolbox\javabuilder\jar\win64\javabuilder.jar。將.jar文件復(fù)制到TestMatlab工程下之后一疯,選中該工程撼玄,單擊file,選擇Properties,選擇Java Build Path墩邀,選擇Libraries,選擇ADD JARs掌猛,再將需要的.jar添加進去。

![](http://upload-images.jianshu.io/upload_images/2761157-0fd31b1db0131de8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
***
5.編寫Java測試代碼,代碼如下:

import com.mathworks.toolbox.javabuilder.MWException;
import rgbtogray.RgbtoGray;
//status :函數(shù)返回值存放于status
//status = matlab.rgbtogray(1,"D:\matlab_java_test\")
//1代表原來函數(shù)需要的參數(shù)個數(shù)為1
//"D:\matlab_java_test\"代表原來函數(shù)中的file_path參數(shù)
public class Test {
public static void main(String[] args) { // TODO Auto-generated method stub
try { RgbtoGray matlab = new RgbtoGray();
Object[] status ;
status = matlab.rgbtogray(1,"D:\matlab_java_test\");
for(Object i:status)
System.out.println(i);
} catch (MWException e) { // TODO Auto-generated catch block
e.printStackTrace();
}//這里RgbtoGray matlab = new RgbtoGray()時需要拋出異常
RgbtoGray.disposeAllInstances();
}
}```

5.運行結(jié)果:可以看到函數(shù)成功地調(diào)用了Matlab函數(shù)眉睹,將圖像灰度化荔茬,并且函數(shù)執(zhí)行完之后成功返回了SUCCESS.

Paste_Image.png
Paste_Image.png
Paste_Image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市辣往,隨后出現(xiàn)的幾起案子兔院,更是在濱河造成了極大的恐慌殖卑,老刑警劉巖站削,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異孵稽,居然都是意外死亡许起,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門菩鲜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來园细,“玉大人,你說我怎么就攤上這事接校∶推担” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵蛛勉,是天一觀的道長鹿寻。 經(jīng)常有香客問我,道長诽凌,這世上最難降的妖魔是什么毡熏? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮侣诵,結(jié)果婚禮上痢法,老公的妹妹穿的比我還像新娘狱窘。我一直安慰自己,他們只是感情好财搁,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布蘸炸。 她就那樣靜靜地躺著,像睡著了一般尖奔。 火紅的嫁衣襯著肌膚如雪幻馁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天越锈,我揣著相機與錄音仗嗦,去河邊找鬼。 笑死甘凭,一個胖子當著我的面吹牛稀拐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播丹弱,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼德撬,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了躲胳?” 一聲冷哼從身側(cè)響起蜓洪,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎坯苹,沒想到半個月后隆檀,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡粹湃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年恐仑,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片为鳄。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡裳仆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出孤钦,到底是詐尸還是另有隱情歧斟,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布偏形,位于F島的核電站静袖,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏壳猜。R本人自食惡果不足惜勾徽,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧喘帚,春花似錦畅姊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至倾鲫,卻和暖如春粗合,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背乌昔。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工隙疚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人磕道。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓供屉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親溺蕉。 傳聞我的和親對象是個殘疾皇子伶丐,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容