Java调用MATLAB,将文件转换为二进制流

考虑到计算的各种情况,有些用Java代码实现的计算难免会显得不够高效。而利用MATLAB写好相应的计算函数,然后打包成jar包供Java调用,在某些情况下会更加方便;或者有些时候会涉及到使用Java调用MatLab展现一些二维三维图。因此用到Java调用MatLab源代码。

MATLAB如何将文件转换为二进制流?

参考:http://blog.csdn.net/GSH_Hello_World/article/details/78455891

Java程序如何调用MATLAB程序?

参考:
http://blog.csdn.net/cs_fang_dn/article/details/50239115
http://blog.csdn.net/kalision/article/details/40503393

MATLAB版本为2014a,JAVA集成开发环境为IntelliJ IDEA。

运行deploytool生成jar包

  1. .m文件需要定义为函数格式,例如function [x,y] = f(a,b);
  2. 之后在Command Window中输入deploytool,选择Library Compiler;

这里写图片描述
3. 选择java package,添加.m文件,填写包名和类名;
这里写图片描述

4.成功生成jar包;
这里写图片描述

编写java代码,并进行相关配置

  1. 拷贝javabuilder.jar和MATLAB生成的jar包image_transmitter.jar(自己填写的名称)到java项目中的libs文件夹(自己创建的,方便查看):
    javabuilder.jar在以下路径:
    D:\MATLAB\R2014a\toolbox\javabuilder\jar\win64(视安装路径而定)
    image_transmitter.jar在以下路径:
    E:\code\toBinary\image_transmitter\for_testing(视.m路径而定)
  2. 将libs路径加到java项目中
    File –> Project Structure –> Modules –> Dependencies –>+ 号 –> 添加 JARs or directories –>选择 Jar 包路径 –> Apply;
    这里写图片描述

参考:http://blog.csdn.net/u013630349/article/details/51778407

  1. 编写java代码;
/**
 * Created by hacker on 2017/11/13.
 */
import image_transmitter.Class1;

public class demo {
    public static void main(String[] args)
    {
        try
        {
            Class1 c = new Class1();
            c.image_transmitter();
        }
        catch(Exception e)
        {
            System.out.println("Exception: " + e.toString());
        }
    }
}

4.Run/Debug Configurations
参考:http://blog.csdn.net/gsh_hello_world/article/details/78017448

5.点击运行按钮运行此程序,运行结果如下:

这里写图片描述

outdata文件夹出现生成的二进制流文件outdata.txt和还原之后的文件test.zip:
这里写图片描述

出现的问题及解决方案

Test checkout of feature ‘Compiler’ failed.

生成jar包时log file中出现错误:Test checkout of feature ‘Compiler’ failed.
原因:因为2014b破解不完全引起的。
解决方案:
pan.baidu.com/s/1qWFbOjq,提取码84rg
下载后解压,把install.jar以及相应位数的三个文件(compiler.dll,mcc.exe,libmwservices.dll)复制到对应位置替换即可,另外把license.lic改为与MATLAB\licenses文件夹下的那个lic文件同名,复制并替换之。
参考:http://blog.csdn.net/smilebluesky/article/details/42987985

生成jar包时出现意外的结束标记错误

E:\code\toBinary\image_transmitter\for_testing\image_transmitter\Class1.java:111: 警告: args没有 @param
    public static void main (String[] args)
                       ^
E:\code\toBinary\image_transmitter\for_testing\image_transmitter\Class1.java:141: 错误: 意外的结束标记: </p>
     * </p>
       ^
E:\code\toBinary\image_transmitter\for_testing\image_transmitter\Class1.java:168: 错误: 意外的结束标记: </p>
     * </p>
       ^
E:\code\toBinary\image_transmitter\for_testing\image_transmitter\Class1.java:200: 错误: 意外的结束标记: </p>

**原因:**JDK版本太高,电脑上安装的为1.8,MATLAB使用version -java得到其支持的是1.7。
解决方案:将电脑上的1.8版本换为1.7即可解决。(matlab 2014a 用jdk1.7,matlab 2013a用jdk1.6)
(jdk版本问题,在cmd中java -version看一下版本,然后在matlab中version -java看一下matlab的java版本,如果不一样,换一下电脑的jdk版本跟matlab一个版本,比如matlab为1.7,电脑为1.8,把电脑的换成1.7版本,重新配置一下环境,这里在配置path的时候把%JAVA_HOME%\bin这个放在最前面,否则可能会导致改不了java版本)

在编译java程序时出现The MCR version that this component is trying to use is: 8.5.

Exception in thread "main" java.lang.UnsatisfiedLinkError: Failed to find the required library mclmcrrt8_5.dll on java.library.path.
This library is typically installed along with MATLAB or the MCR. Its absence may indicate an issue with that installation or the current path configuration.
The MCR version that this component is trying to use is: 8.5.

出现这个问题原因可能有两个:
1. 未安装MCRInstaller.exe:安装D:\Program Files\MATLAB\R2014a\toolbox\compiler\deploy\win64下面的MCRInstaller.exe。
2. java的JDK版本比MATLAB的低,需要重新安装低版本的JDK(需要更改系统环境变量),然后IDEA软件会自动选择JDK版本。

程序链接:http://download.csdn.net/download/gsh_hello_world/10117188

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大师兄电子工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值