Java调用MATLAB程序

来源:互联网 发布:社交软件市场分析 编辑:程序博客网 时间:2024/06/05 21:56

1.在MATLAB中生成Java工程

打开开发工具箱:

  

类型选择Java Package

     

填写类名

   

导入MATLAB文件

  

开始编译

    

编译完成

      


2.运行异常

这次编写程序运用到Java和MATLAB,通过MATLAB写好程序并打包成jar文件copy到Java中进行调用,运行程序却抛出了异常。    

Exception in thread "main" java.lang.UnsatisfiedLinkError: Failed to find the library mclmcrrt7_15.dll, required by MATLAB Builder JA, 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: 7.15.

       出现这个问题的原因是MCR可能没有安装,所以就先来安装MCR,安装文件在/matlab/toolbox/compiler/deploy/win64/MCRInstaller.exe,找到该文件双击进行安装,如果之前存在这个文件就先卸载再安装,安装成功后重启电脑即可。

      再次运行程序已解决刚才的MCR问题,但是又有一个新的bug,即

java.lang.UnsatisfiedLinkError: Native Library C:\Program Files\MATLAB\MATLAB Compiler Runtime\v715\runtime\win64\BuilderJABootstrap.dll already loaded in another classloader

       原因是项目界面调用了一个小程序,项目的另一个界面调用了另一个小程序,而这两个小程序实际上同一个程序,也是运行在同一jvm中,由于在一个jvm中是不允许加载一个dll两次,因此当小程序1先执行小程序2再执行加载dll就会报错,反过来由21也是会报错的(参考)。所以需要解决如何只让web项目只加载dll一次。

尝试过网上很多的解决方法,大多都不适用,最后在一篇博文中找到了良药。主要方法是将调用dlljar包放入到web server的公共lib文件夹中(如tomcat/lib),而不是web应用的lib中(如WEB-INF/lib)。就本程序抛出的问题而言,调用BuilderJABootstrap.dll的jar包是javabuilder.jar,将javabuilder.jarcopytomcat/lib中,然后重启web应用,再测试,no problem



1 0