从jar文件执行时,matlabcontrol无法启动MATLAB

public static MatlabProxy open(String pathname, String exe) {
        //MatlabProxyFactoryOptions设置matlab
        MatlabProxyFactoryOptions.Builder builder = new MatlabProxyFactoryOptions.Builder();
        //设置matlab GUI隐藏,Windows操作系统中 MATLAB command window还是会显示(如果想让MATLAB command window也隐藏,需要用到JNA),Linux会全部隐藏
        builder.setHidden(true);
        //设置使用已存在的matlab,设置这个不会运行一次matlab启动一次
        builder.setUsePreviouslyControlledSession(true);
        File file = new File(pathname);
        //设置matlab启动时路径
        builder.setMatlabStartingDirectory(file);
        //设置获取代理的时间,这里的300000有的时候不够,改长一点就可以
        builder.setProxyTimeout(300000);
        builder.setMatlabLocation("E:\\r2021a\\bin\\matlab.exe");
        MatlabProxyFactory factory = new MatlabProxyFactory(builder.build());
        //获取matlab代理(用的是代理模式)
        MatlabProxy proxy = null;
        try {
            proxy = factory.getProxy();
        } catch (MatlabConnectionException e) {
            e.printStackTrace();
        }
        return proxy;
    }

idea 运行都没有问题,打包成jar文件后运行就报错怎么解决求告知
错误信息如下:

matlabcontrol.MatlabConnectionException: Support code location could not be determined. Could not get path from URI location.
URI Location: jar:file:/H:/datamanage-0.0.1-SNAPSHOT.jar!/BOOT-INF/lib/matlabcontrol-4.1.0.jar!/
URL Location: jar:file:/H:/datamanage-0.0.1-SNAPSHOT.jar!/BOOT-INF/lib/matlabcontrol-4.1.0.jar!/
Code Source: (jar:file:/H:/datamanage-0.0.1-SNAPSHOT.jar!/BOOT-INF/lib/matlabcontrol-4.1.0.jar!/ <no signer certificates>)
Protection Domain: ProtectionDomain  (jar:file:/H:/datamanage-0.0.1-SNAPSHOT.jar!/BOOT-INF/lib/matlabcontrol-4.1.0.jar!/ <no signer certificates>)
 org.springframework.boot.loader.LaunchedURLClassLoader@31221be2
 <no principals>
 java.security.Permissions@752be45a (
 ("java.util.PropertyPermission" "java.specification.version" "read")
 ("java.util.PropertyPermission" "java.version" "read")
 ("java.util.PropertyPermission" "os.arch" "read")
 ("java.util.PropertyPermission" "java.specification.vendor" "read")
 ("java.util.PropertyPermission" "java.vm.specification.name" "read")
 ("java.util.PropertyPermission" "java.vm.vendor" "read")
 ("java.util.PropertyPermission" "path.separator" "read")
 ("java.util.PropertyPermission" "os.version" "read")
 ("java.util.PropertyPermission" "file.separator" "read")
 ("java.util.PropertyPermission" "line.separator" "read")
 ("java.util.PropertyPermission" "java.vm.specification.vendor" "read")
 ("java.util.PropertyPermission" "java.specification.name" "read")
 ("java.util.PropertyPermission" "java.vendor.url" "read")
 ("java.util.PropertyPermission" "java.vendor" "read")
 ("java.util.PropertyPermission" "java.vm.version" "read")
 ("java.util.PropertyPermission" "java.vm.name" "read")
 ("java.util.PropertyPermission" "java.vm.specification.version" "read")
 ("java.util.PropertyPermission" "os.name" "read")
 ("java.util.PropertyPermission" "java.class.version" "read")
 ("java.net.SocketPermission" "localhost:0" "listen,resolve")
 ("java.lang.RuntimePermission" "stopThread")
 ("java.io.FilePermission" "H:\datamanage-0.0.1-SNAPSHOT.jar" "read")

注意一下matlabcontrol-4.1.0.jar这个jar包配置的路径是否正确,依赖库是否build了

在java web 程序中的servlet中或者在struts2 的action中调用
public void waterpredict()throws MatlabConnectionException,MatlabInvocationException{
MatlabProxyFactory factory = new MatlabProxyFactory();
MatlabProxy proxy = factory.getProxy();
proxy.eval("disp('chenggong')");
proxy.feval("test");
proxy.exit();
}
这个函数报matlabcontrol.MatlabConnectionException: Support code location could not be determined
at matlabcontrol.Configuration.getSupportCodeLocation错误。
Caused by: java.net.URISyntaxException: Illegal character in path at index 15
单元测试时不报错,可以连接,就是web程序中有问题,哪位大神这个请不吝赐教!

img

虽然说我没试过java与matlab生成jar文件运行
但是数模软件用的不少,生成的m文件应该跟它放在同一个工程目录下吧,还有从报错的英文来看,你得先检查下那个工具的版本是否与matlab的兼容
之后再打包成一个文件就能行了。望采纳比心

换成wrapper方式打包可以运行,实测可行

matlabcontrol.MatlabConnectionException:Support code location could not be determined,根据你的运行错误信息,应该是你的依赖库没有安装或者没有配置运行matlabcontrol对应的环境变量

错误消息显示它找不到程序“matlab.exe”
你需要配置系统环境变量Path
添加如“C:\Program Files\MATLAB\MATLAB Runtime\”或“C:\Program Files \MATLAB\MATLAB Compiler\”,必须是你运行matlab.exe的文件夹
如同配置java


下面的链接是另外一个解决方案
https://viatra.github.io/massif/user/matlab_connectors.html