从MATLAB调用Java?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (18)

我想让Matlab程序调用一个java文件,最好用一个例子。

提问于
用户回答回答于

好吧,我会尽量在这里举一个小例子。按照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

让我知道,如果我可以得到进一步的援助。

用户回答回答于

有三种情况需要考虑。

  1. Java内置库。 就是这里所描述的任何东西。这些项目可以直接调用。例如: map = java.util.HashMap; map.put(1,10); map.put(2,30); map.get(1) %returns 10 唯一的麻烦是映射Matlab在Matlab数据类型和Java数据类型之间执行映射。这些映射在这里描述(Matlab to Java)这里(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')

扫码关注云+社区