利用matlab生成jar包

本博客转载自http://blog.csdn.net/wengdada/article/details/52017274

主要过程:利用MATLAB的Compiler工具将MATLAB函数编译成.jar文件,在Eclipse中实现对.jar文件中函数的调用,以此实现MATLAB和JAVA的混合编程。


1.环境配置要求:运行机器上必须装有JRE并且版本要和MatLab(Matlab这里用的是2016b版本)自带的JRE版本保持一致。在Matlabd的Command Windows中输入【version -java】以及打开cmd 分别输入命令【java -version】和【javac -version】分别验证编译和运行版本。

在matlab中验证matlab用的jdk版本

在cmd中验证系统中安装的jdk版本

2.在Matlab中新建一个函数文件,编写需打包成.jar到的Matlab函数并保存,这里以一个rgbtogray()函数为例。

Paste_Image.png

代码如下:

   %函数功能:rgbtogray()这个函数将D:\matlab_java_test\目录下的所有.jpg文件转化为灰度图,
  %并且显示出来,之后将得到的灰度图改名存放在原来的目录下
  %status:函数返回值,若成功处理图片,放回SUCCESS;
  %file_path:输入参数,要处理的图片所在的路径 
  img_path_list = dir(strcat(file_path,'*.jpg'));%获取该文件夹中所有jpg格式的图像
  photo_num = length(img_path_list);%获取该文件夹中所有jpg格式的图像的数量 
  disp('The number of pictures '); 
  fprintf('%d \n',photo_num);% 显示图像数量 
  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);%调用matlab原有函数将图片转化为灰度图 
      imshow(Image); 
      imwrite(Image,strcat('D:\matlab_java_test\new',image_name,'.jpg'));%保存图片 
      pause(2);%暂停两秒,用来显示图像 
    end 
    close all; %由于出来好多个figure,一键关闭 
    status = 'SUCCESS'; 
  end
end```
***
3.在Matlab下选择应用程序,使用Library Compiler工具得到Matlab函数的.jar文件。打开Library Compiler工具后,选择Java Package,再点击+号,选择要打包的.m文件,填写修改相关的信息,红框4显示的是打包成.jar文件后里面包含的类以及方法的名称,信息可以根据自己需要更改,最后单击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包含用于安装应用程序和MATLAB Runtime的文件,可以将这份文件复制到没有安装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文件夹包含应用程序的重新发布所需的文件。这些文件可以分发到那些有MATLAB或者有 MATLAB Runtime 的用户的电脑上。

 -for_testing文件夹包含创建的所有由MCC创建的文件,像二进制文件和jar,头和源文件,使用这些文件来测试安装。 -PackagingLog.txt是由编译器生成的日志文件。 如果.jar库中的内容不熟悉也可以找到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)复制到该工程下,除此之外,还要将另外一个.jar文件复制到该工程下,该文件是javabuilder.jar,在<mcr_root>*\toolbox\javabuilder\jar\win64\javabuilder.jar目录下可以找到,<mcr_root>*是MATLAB的安装目录或者MATLAB Runtime的安装目录,这两个目录下均可以找到toolbox\javabuilder\jar\win64\javabuilder.jar。将.jar文件复制到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 :函数返回值存放于status
//status = matlab.rgbtogray(1,"D:\matlab_java_test\")
//1代表原来函数需要的参数个数为1
//"D:\matlab_java_test\"代表原来函数中的file_path参数
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.运行结果:可以看到函数成功地调用了Matlab函数,将图像灰度化,并且函数执行完之后成功返回了SUCCESS.

Paste_Image.png
Paste_Image.png
Paste_Image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容