从MATLAB调用Java?

Vru*_*hvi 15 java matlab

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

Pur*_*uit 29

有三种情况需要考虑.

  1. Java内置库.

    也就是说,这里描述什么.这些项目可以直接调用.例如:

    map = java.util.HashMap;
    map.put(1,10);
    map.put(2,30);
    map.get(1)   %returns 10
    
    Run Code Online (Sandbox Code Playgroud)

    唯一的复杂因素是Matlab在Matlab数据类型和Java数据类型之间执行的映射.这里描述这些映射(Matlab到Java)这里(Java到Matlab).(tl; dr:通常映射如你所料)

  2. 预编译*.jar文件

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

    javaaddpath('c:\full\path\to\compiledjarfile.jar')
    
    Run Code Online (Sandbox Code Playgroud)

    您还可以通过编辑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')
    
    Run Code Online (Sandbox Code Playgroud)


mac*_*uff 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;
  }
}
Run Code Online (Sandbox Code Playgroud)

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

jar cvf testMatlab.jar testMatlabInterface
Run Code Online (Sandbox Code Playgroud)

然后,在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
Run Code Online (Sandbox Code Playgroud)

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