从MATLAB调用Java?

时间:2012-03-01 16:55:16

标签: java matlab

我希望Matlab程序调用一个java文件,最好是一个例子。

2 个答案:

答案 0 :(得分:29)

有三种情况需要考虑。

  1. Java内置库。

    即,here所描述的任何内容。这些项目可以直接调用。例如:

    map = java.util.HashMap;
    map.put(1,10);
    map.put(2,30);
    map.get(1)   %returns 10
    

    唯一的复杂因素是Matlab在Matlab数据类型和Java数据类型之间执行的映射。这些映射描述为here (Matlab to Java)here (Java to Matlab)。 (tl; dr:通常映射是你想象的那样)

  2. 预编译* .jar文件

    首先需要将这些添加到Matlab的java类路径中。您可以动态执行此操作(即,每个Matlab会话,没有必需的Matlab状态),如下所示:

    javaaddpath('c:\full\path\to\compiledjarfile.jar')
    

    您还可以通过编辑classpath.txt文件来静态添加这些文件。有关更多信息,请使用docsearch java class path

  3. 预编译* .class文件。

    这些类似于* .jar文件,除了您需要添加包含类文件的目录,而不是类文件本身。例如:

    javaaddpath('c:\full\path\to\directory\containing\class\files\')  
    %NOT THIS:  javaaddpath('c:\full\path\to\directory\containing\class\files\classname.class')
    

答案 1 :(得分:24)

好的,我会尝试在这里给出一个小例子。可以像在zellus建议的那样使用Matlab窗口中的java函数,或者,如果需要,可以创建自己的java类。这是一个例子:

package testMatlabInterface;

public class TestFunction
{
  private double value;

  public TestFunction()
  {
      value = 0;
  }

  public double Add(double v)
  {
      value += v;
      return value;
  }
}

然后将其转换为jar文件。假设您将文件放在名为testMatlabInterface的文件夹中,请在命令行运行此命令:

jar cvf testMatlab.jar testMatlabInterface

然后,在Matlab中,导航到testMatlab.jar文件所在的目录并运行命令import testMatlabInterface.*以导入testMatlabInterface包中的所有类。然后你可以像这样使用这个类:

>> methodsview testMatlabInterface.TestFunction
>> me = testMatlabInterface.TestFunction()

me =

testMatlabInterface.TestFunction@7e413c

>> me.Add(10)

ans =

    10

>> me.Add(10)

ans =

    20

>> me.Add(10)

ans =

    30

如果我能得到进一步帮助,请告诉我。

相关问题