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程序中有问题,哪位大神这个请不吝赐教!
虽然说我没试过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