【问题标题】:Calling Java from MATLAB?从 MATLAB 调用 Java?
【发布时间】:2018-11-06 14:31:05
【问题描述】:

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

【问题讨论】:

标签: java matlab


【解决方案1】:

需要考虑三种情况。

  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')
    

【讨论】:

  • 非常感谢。您的指导真的很有帮助!
  • class not found 异常,虽然我已经添加了路径
  • @zinking 确保在编译 Java 类时,您所针对的 JRE 版本至少与您正在使用的 MATLAB 发行版附带的版本一样旧。如果您的类文件的版本号比 MATLAB 的 JRE 支持的版本号更新,它们将不会被加载,并且当您尝试使用它们时会收到 ClassNotFoundException。例如,R2006b 附带 JRE5,因此如果您使用 JDK6 或更高版本进行编译,则需要使用 javac --source 1.5 --target 1.5 <other arguments>
【解决方案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.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

如果我能提供进一步的帮助,请告诉我。

【讨论】:

  • 非常感谢!您的帖子很有帮助。
猜你喜欢
  • 2011-10-22
  • 2015-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多