我一直在尝试编辑以下matlabcontrol代码,但运行时仍然出现错误。请朋友帮帮我!
package matcontro;
import matlabcontrol.*;
public class HelloWorld
{
public static void main(String[] args) throws MatlabConnectionException, MatlabInvocationException
{
// create proxy
MatlabProxyFactoryOptions options = new MatlabProxyFactoryOptions.Builder()
.setUsePreviouslyControlledSession(true)
.build();
MatlabProxyFactory factory = new MatlabProxyFactory(options);
MatlabProxy proxy = factory.getProxy();
// call builtin function
proxy.eval("disp('hello world')");
// call user-defined function (must be on the path)
proxy.eval("addpath('C:\\ Users\\HASENDE\\My Documents\\MATLAB')");
proxy.feval("myfunc");
proxy.eval("rmpath('C:\\ Users\\HASENDE\\My Documents\\MATLAB')");
// close connection
proxy.disconnect();
}
}
我得到的错误如下;
运行:
线程“main”中的异常matlabcontrol.MatlabConnectionException: 无法启动MATLAB。命令:[matlab,-r,javaaddpath 'C:\ Users \ HASENDE \ Documents \ NetBeansProjects \ Java Classpath 库\ matlabcontrol-4.0.0.jar“; matlabcontrol.MatlabClassLoaderHelper.configureClassLoading(); javarmpath'C:\ Users \ HASENDE \ Documents \ NetBeansProjects \ Java Classpath 库\ matlabcontrol-4.0.0.jar“; matlabcontrol.MatlabConnector.connectFromMatlab( 'PROXY_RECEIVER_01caa56d-9ed7-4e39-a45b-345051024d49', 2100);]
在 matlabcontrol.RemoteMatlabProxyFactory.createProcess(RemoteMatlabProxyFactory.java:305) 在 matlabcontrol.RemoteMatlabProxyFactory.requestProxy(RemoteMatlabProxyFactory.java:116)
在 matlabcontrol.RemoteMatlabProxyFactory.getProxy(RemoteMatlabProxyFactory.java:134)
at matlabcontrol.MatlabProxyFactory.getProxy(MatlabProxyFactory.java:81) at matcontro.HelloWorld.main(HelloWorld.java:21)
造成:java.io.IOException:无法运行程序“matlab”:CreateProcess error = 2,系统找不到指定的文件 java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)at matlabcontrol.RemoteMatlabProxyFactory.createProcess(RemoteMatlabProxyFactory.java:292) ......还有4个
引起:java.io.IOException:CreateProcess error = 2,系统 找不到指定的文件
at java.lang.ProcessImpl.create(Native Method) at java.lang.ProcessImpl.<init>(ProcessImpl.java:188) at java.lang.ProcessImpl.start(ProcessImpl.java:132) at java.lang.ProcessBuilder.start(ProcessBuilder.java:1021) ... 5 more
Java结果:1
建立成功(总时间:4秒)
答案 0 :(得分:3)
问题是Windows和Linux上的matlabcontrol需要理解'matlab',因为MATLAB目录是PATH环境变量的一部分。此异常表明情况并非如此。没关系,您只需要明确设置MATLAB可执行文件的位置即可。来自javadoc for setMatlabLocation(...):
设置将启动MATLAB的MATLAB可执行文件或脚本的位置。如果无法成功使用值集启动MATLAB,则在尝试创建代理时将抛出异常。
MATLAB可执行文件的绝对路径可以通过运行MATLAB来确定。在OS X或Linux上,在命令窗口中评估[matlabroot'/ bin / matlab']。在Windows上,在命令窗口中评估[matlabroot'/ bin/matlab.exe']。只要操作系统可以解析路径,提供的位置就不必是绝对路径。
<强>窗强>
将理解与以下相关的位置:
- 当前工作目录
- 仅限Windows目录(不搜索子目录)
- Windows \ System32目录
- PATH环境变量中列出的目录
- 使用密钥HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ App Paths在注册表中定义的应用程序路径
默认情况下,在Windows上,MATLAB在注册表中放置一个App Path条目,以便matlab可用于启动MATLAB。如果未设置此属性,则将使用此App Path条目。
OS X
将理解与以下相关的位置:
- 当前工作目录
- PATH环境变量中列出的目录
在OS X上,MATLAB作为应用程序包安装在/ Applications /中。如果未设置此属性,则将使用应用程序包内的可执行文件。
<强>的Linux 强>
将理解与以下相关的位置:
- 当前工作目录
- PATH环境变量中列出的目录
在Linux上的安装过程中,MATLAB可以创建一个名为matlab的符号链接,可用于启动MATLAB。如果未设置此属性,则将使用此符号链接。
答案 1 :(得分:0)
为了补充答案,我遇到了类似的问题(我使用的是Intellij IDEA和Matlab R2014a)。事实上,环境变量路径中缺少程序的确切路径。可以找到一些matlab路径(或者在安装matlab时自动编写),例如&#34; C:\ Program Files \ MATLAB \ MATLAB Runtime \&#34;或&#34; C:\ Program Files \ MATLAB \ MATLAB Compiler \&#34;但只有持有.exe工作的那个,比如&#34; C:\ Program Files \ MATLAB \ R2014a \ bin&#34;。然而,在我重新启动IDE之前,我的程序没有工作。记住这一点。