从 MATLAB 调用 Java?

2022-09-03 08:38:47

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


答案 1

有三种情况需要考虑。

  1. Java 内置库。

    也就是说,这里描述的任何内容。这些项目可以直接调用。例如:

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

    唯一的复杂之处在于 Matlab 在 Matlab 数据类型和 Java 数据类型之间执行的映射。这些映射在这里(Matlab到Java)这里(Java到Matlab)描述。(tl; dr:通常映射是你所期望的)

  2. 预编译的 *.jar 文件

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

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

    还可以通过编辑类路径.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')
    

答案 2

好吧,我将尝试在这里给出一个迷你示例。要么按照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.jarimport 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

让我知道我是否可以提供进一步的帮助。


推荐