使用matlabcontrol API调用在Netbeans中从Java调用matlab函数

时间:2012-03-01 00:45:01

标签: java matlab

我一直在尝试编辑以下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秒)

2 个答案:

答案 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之前,我的程序没有工作。记住这一点。