【问题标题】:Call a java function from matlab script从 matlab 脚本调用 java 函数
【发布时间】:2016-08-27 14:35:12
【问题描述】:

我正在尝试从 Matlab 脚本调用 java 函数,我尝试了网站中的所有解决方案,但没有遇到问题。 我的课很简单:

  package testMatlabInterface;

public class TestFunction
{
  private double value;

  public TestFunction()
  {
      value=0;
  }

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

  public static void main(String args[])
  {

  }
}

所以我把.java 文件(也是.class)放在我的工作空间C:\scriptsMatlab 中,我将此路径添加到Matlab 的javaclasspath,但是当我尝试调用该函数时,它告诉我没有类在Matlab 中的javaclasspath 中使用此名称。

编辑: 这是 Matlab 使用的 java 版本:

Java 1.6.0_17-b04 with Sun Microsystems Inc. Java HotSpot(TM) Client VM mixed mode

这是我用来编译我的类的 jdk 版本:

但是当我尝试从 matlab 执行这个命令时

>> javaaddpath 'C:\scriptsMatlab'
>> obj = TestFunction

它告诉我:

Undefined function or variable 'TestFunction'.

【问题讨论】:

  • 参数可能需要单引号。如果您尝试import MyFunction.*,会发生什么?
  • 它导入它但它无法识别类
  • 我试图在这里 stackoverflow.com/questions/9520503/calling-java-from-matlab 关注 macduff 的答案,但我被困在“methodsview testMatlabInterface.TestFunction”中,它说“找不到类 testMatlabInterface.TestFunction 或没有类方法”
  • 你用哪个java版本来编译你的类?最好使用与您的 Matlab 相同的主要版本,否则可能无法正常工作。
  • 同一个版本,编辑后可以看到我的问题

标签: java matlab training-data nntool


【解决方案1】:

选项 1

  1. 检查是否使用相同的 JRE/JDK 来编译您的 JAVA 文件。在 Matlab 上执行:

    version -java
    
  2. 使用 same jdk 编译您的 MyFunction.java,并找到您的 MyFunction.class

  3. 找到您的 Matlab 类路径.txt。在 matlab cmd 中输入以下内容。

    which classpath.txt
    
  4. 以管理员身份打开您的 classpath.txt。将包含 MyFunction.class 的目录的完整路径添加到“classpath.txt”文件的末尾作为单行并保存文件。

  5. 重启 Matlab。

  6. 在 Matlab 中运行。创建 MyFunction 的对象。

    obj = MyFunction
    

    在matlab中运行main()方法。

    javaMethod('main', obj, '')
    

选项 2

按照步骤 1-2。

在 Matlab 中执行以下命令

JAVAADDPATH PATH/to/Directoryof MyFunction.class.

这里不需要重启 Matlab。 只需运行

obj = MyFunction;
javaMethod('main', obj);

来自 MathWorks:

javaMethod(MethodName,JavaObj,x1,...,xN) 调用具有与参数 x1,...,xN 匹配的签名的 Java® 对象数组类中的方法。

javaMethod(StaticMethodName,ClassName,x1,...,xN) 调用 ClassName 类中的静态方法。

【讨论】:

  • 如果不调用 obj = MyFunction 。什么是 TestFunction ?
  • 对不起,我只是用另一个改变了测试功能
  • 您是否遵循选项 1 ?将带有包目录的 testfunction.class 添加到您的 matlab cp 中?
  • 类路径未正确添加。检查java类路径。也尝试遵循 javaaddpath('.class 文件所在的目录'); a = TestFunction(); //创建一个java类的对象。方法视图(a); // 显示所有方法。 a.添加();调用 Java 方法 Add()。添加 classpath 检查 matlab 的 classpath.txt 后,它是否具有 .class 文件的 cp。同时删除目录中的 .java。仅将 .class 保留在类路径中
  • 奇怪的是没有比这更方便的了。
猜你喜欢
  • 2017-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-24
相关资源
最近更新 更多